about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2012-08-29 10:03:39 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2012-08-29 10:04:23 +0530
commit050af9c4e86eeecd484ed44b7765e750523276eb (patch)
tree0f0db2f1ddbadd2288acc5540eb9684337c78815
parentad845c0be95fe3635af0147f0665b110286e68a5 (diff)
downloadglibc-050af9c4e86eeecd484ed44b7765e750523276eb.tar.gz
glibc-050af9c4e86eeecd484ed44b7765e750523276eb.tar.xz
glibc-050af9c4e86eeecd484ed44b7765e750523276eb.zip
Don't make ttyname* fail if proc filesystem is not available
The ttyname and ttyname_r functions on Linux now fall back to
searching for the tty file descriptor in /dev/pts or /dev if /proc is
not available.  This allows creation of chroots without the procfs
mounted on /proc.

Fixes BZ #14516.
-rw-r--r--ChangeLog7
-rw-r--r--NEWS6
-rw-r--r--sysdeps/unix/sysv/linux/ttyname.c6
-rw-r--r--sysdeps/unix/sysv/linux/ttyname_r.c6
4 files changed, 12 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index f72f4b41b3..2490456703 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-08-29  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	[BZ #14516]
+	* sysdeps/unix/sysv/linux/ttyname.c (ttyname): Don't return
+	failure if reading from procfs failed.
+	* sysdeps/unix/sysv/linux/ttyname_r.c (ttyname_r): Likewise.
+
 2012-08-27  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/unix/sysv/linux/kernel-features.h
diff --git a/NEWS b/NEWS
index 247139018d..6abc6eab80 100644
--- a/NEWS
+++ b/NEWS
@@ -12,7 +12,7 @@ Version 2.17
   3479, 5400, 6778, 6808, 9685, 11607, 13717, 13696, 13939, 14042, 14090,
   14166, 14150, 14151, 14154, 14157, 14166, 14173, 14195, 14252, 14283,
   14298, 14303, 14307, 14328, 14331, 14336, 14337, 14347, 14349, 14459,
-  14505, 14519
+  14505, 14516, 14519
 
 * Support for STT_GNU_IFUNC symbols added for s390 and s390x.
   Optimized versions of memcpy, memset, and memcmp added for System z10 and
@@ -40,6 +40,10 @@ Version 2.17
   New configure option --disable-build-nscd avoids building nscd itself;
   this is the default if --disable-nscd is used.
 
+* The ttyname and ttyname_r functions on Linux now fall back to searching for
+  the tty file descriptor in /dev/pts or /dev if /proc is not available.  This
+  allows creation of chroots without the procfs mounted on /proc.
+
 
 Version 2.16
 
diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
index 3dacd40c23..d3070c3ba8 100644
--- a/sysdeps/unix/sysv/linux/ttyname.c
+++ b/sysdeps/unix/sysv/linux/ttyname.c
@@ -148,12 +148,6 @@ ttyname (int fd)
     }
 
   ssize_t len = __readlink (procname, ttyname_buf, buflen);
-  if (__builtin_expect (len == -1 && errno == ENOENT, 0))
-    {
-      __set_errno (EBADF);
-      return NULL;
-    }
-
   if (__builtin_expect (len != -1, 1))
     {
       if ((size_t) len >= buflen)
diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
index 2dd6781348..211ed189bb 100644
--- a/sysdeps/unix/sysv/linux/ttyname_r.c
+++ b/sysdeps/unix/sysv/linux/ttyname_r.c
@@ -128,12 +128,6 @@ __ttyname_r (int fd, char *buf, size_t buflen)
   *_fitoa_word (fd, __stpcpy (procname, "/proc/self/fd/"), 10, 0) = '\0';
 
   ssize_t ret = __readlink (procname, buf, buflen - 1);
-  if (__builtin_expect (ret == -1 && errno == ENOENT, 0))
-    {
-      __set_errno (EBADF);
-      return EBADF;
-    }
-
   if (__builtin_expect (ret == -1 && errno == ENAMETOOLONG, 0))
     {
       __set_errno (ERANGE);