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>
+2018-03-27 Jesse Hathaway <jesse@mbuki-mvuki.org>
+
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
+ early when linux sentinel value is set.
+
2018-03-27 Samuel Thibault <samuel.thibault@ens-lyon.org>
* sysdeps/mach/hurd/bits/posix_opt.h (_POSIX_MEMLOCK): Define.
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;
+ }
+
struct passwd pwd;
struct passwd *tpwd;
int result = 0;