bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

test-openat-safer failure on older kernel


From: Eric Blake
Subject: test-openat-safer failure on older kernel
Date: Fri, 04 Sep 2009 21:28:58 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On on older machine (2.6.16.29 kernel, glibc 3.4.6), when using /proc
emulation, openat(fd,"",O_RDONLY) was accidentally succeeding in opening a
copy of /proc/self/fd/n (ie. the directory pointed to by fd) instead of
failing with ENOENT.  Fixed as follows.  Fortunately, in a quick audit, I
didn't see any code path in fts or coreutils that seems like it would pass
an empty argument to openat, which is why my test-openat-safer was the
first thing to catch this in nearly 3 years of use.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkqh2voACgkQ84KuGfSFAYBxOQCcD/+S3vNkOQ9VOM1bxqhwwzhV
BH4AoMwaMEkZX1Vr2IpVcQkzRlZq3yWU
=0dhK
-----END PGP SIGNATURE-----
>From c46ae39631773a7fdae7d171cc4ef0bf2123efff Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Fri, 4 Sep 2009 21:22:21 -0600
Subject: [PATCH] openat: fail with ENOENT on empty name

* lib/openat-proc.c (openat_proc_name): Special-case the empty
buffer.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog         |    4 ++++
 lib/openat-proc.c |    7 +++++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 193ec7f..ecbf16e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2009-09-04  Eric Blake  <address@hidden>

+       openat: fail with ENOENT on empty name
+       * lib/openat-proc.c (openat_proc_name): Special-case the empty
+       buffer.
+
        link-follow: fix logic bug in prior patch
        * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Fix bug that
        reversed sense of yes and no in prior patch.  Avoid confusing
diff --git a/lib/openat-proc.c b/lib/openat-proc.c
index 8057033..76e1c6d 100644
--- a/lib/openat-proc.c
+++ b/lib/openat-proc.c
@@ -57,6 +57,13 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char 
const *file)
 {
   static int proc_status = 0;

+  /* Make sure the caller gets ENOENT when appropriate.  */
+  if (!*file)
+    {
+      buf[0] = '\0';
+      return buf;
+    }
+
   if (! proc_status)
     {
       /* Set PROC_STATUS to a positive value if /proc/self/fd is
-- 
1.6.3.3.334.g916e1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]