You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.3 KiB
38 lines
1.3 KiB
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> |
|
|
|
Index: b/sysdeps/unix/sysv/linux/getlogin_r.c |
|
=================================================================== |
|
--- a/sysdeps/unix/sysv/linux/getlogin_r.c |
|
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c |
|
@@ -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;
|
|
|