| commit cc8a1620eb97ccddd337d157263c13c57b39ab71 |
| Author: Jesse Hathaway <jesse@mbuki-mvuki.org> |
| Date: Tue Mar 27 21:17:59 2018 +0000 |
| |
| getlogin_r: return early when linux sentinel value is set |
| |
| 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> |
| |
| |
| |
| |
| |
| @@ -54,6 +54,15 @@ __getlogin_r_loginuid (char *name, size_ |
| 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; |