]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
getlogin_r: return early when linux sentinel value is set
authorJesse Hathaway <jesse@mbuki-mvuki.org>
Thu, 17 May 2018 11:56:33 +0000 (13:56 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Thu, 17 May 2018 11:56:33 +0000 (13:56 +0200)
When there is no login uid Linux sets /proc/self/loginid to the sentinel
value of, (uid_t) -1. If this is set we can return early and avoid
needlessly looking up the sentinel value in any configured nss
databases.

Checked on aarch64-linux-gnu.

* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
early when linux sentinel value is set.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
(cherry picked from commit cc8a1620eb97ccddd337d157263c13c57b39ab71)

ChangeLog
NEWS
sysdeps/unix/sysv/linux/getlogin_r.c

index 8c1ff9d4b268b769ed83f047e4c1b3ecd2504731..da8d9a5190505a8c8e7132e733e1a4edc40ec72a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-27  Jesse Hathaway  <jesse@mbuki-mvuki.org>
+
+       [BZ #23024]
+       * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
+       early when linux sentinel value is set.
+
 2018-04-09  Florian Weimer  <fweimer@redhat.com>
 
        [BZ #23037]
diff --git a/NEWS b/NEWS
index 8c432b3e6eb69cd0965f1ed0db8a6c73255e3db7..dcbb2b0ff6fb20aba05f535d0484171874a83d30 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -118,6 +118,7 @@ The following bugs are resolved with this release:
   [22685] powerpc: Fix syscalls during early process initialization
   [22715] x86-64: Properly align La_x86_64_retval to VEC_SIZE
   [22774] malloc: Integer overflow in malloc (CVE-2018-6551)
+  [23024] getlogin_r: return early when linux sentinel value is set
   [23037] resolv: Fully initialize struct mmsghdr in send_dg
 \f
 Version 2.26
index 05ac36b49186b29e7cc07624e55489ff684c1a0f..fe81fd196ab3be73c17aa44deea7da2d46724619 100644 (file)
@@ -54,6 +54,15 @@ __getlogin_r_loginuid (char *name, size_t namesize)
          endp == uidbuf || *endp != '\0'))
     return -1;
 
+  /* If there is no login uid, linux sets /proc/self/loginid to the sentinel
+     value of, (uid_t) -1, so check if that value is set and return early to
+     avoid making unneeded nss lookups. */
+  if (uid == (uid_t) -1)
+    {
+      __set_errno (ENXIO);
+      return ENXIO;
+    }
+
   size_t buflen = 1024;
   char *buf = alloca (buflen);
   bool use_malloc = false;