commit:     f2b83d5bfd9904ad32cb6f2f5bd42fea07f8fddd
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 20 03:06:17 2016 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Mon Jun 20 03:06:17 2016 +0000
URL:        https://gitweb.gentoo.org/proj/pax-utils.git/commit/?id=f2b83d5b

paxelf: use fstat instead of stat && open

This fixes a minor race condition.

 paxelf.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/paxelf.c b/paxelf.c
index a353e57..5b6fe24 100644
--- a/paxelf.c
+++ b/paxelf.c
@@ -629,19 +629,19 @@ elfobj *_readelf(const char *filename, int read_only)
        struct stat st;
        int fd;
 
-       if (stat(filename, &st) == -1)
-               return NULL;
-
        if ((fd = open(filename, (read_only ? O_RDONLY : O_RDWR))) == -1)
                return NULL;
 
-       /* make sure we have enough bytes to scan e_ident */
-       if (st.st_size <= EI_NIDENT) {
-close_fd_and_return:
+       if (fstat(fd, &st) == -1) {
+ close_fd_and_return:
                close(fd);
                return NULL;
        }
 
+       /* make sure we have enough bytes to scan e_ident */
+       if (st.st_size <= EI_NIDENT)
+               goto close_fd_and_return;
+
        ret = readelf_fd(filename, fd, st.st_size);
        if (ret == NULL)
                goto close_fd_and_return;

Reply via email to