public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] getlogin_r: return early when linux sentinel value is set
@ 2018-03-16 16:18 Jesse Hathaway
  2018-03-19 15:03 ` Jesse Hathaway
  2018-03-20  8:00 ` Adhemerval Zanella
  0 siblings, 2 replies; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-16 16:18 UTC (permalink / raw)
  To: libc-alpha

When there is no login uid Linux sets /proc/self/loginid to the sentinel
value of 4294967295. If this is set we can return early and avoid
needlessly looking up the sentinel value in any configured nss
databases.

diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
b/sysdeps/unix/sysv/linux/getlogin_r.c
index 73ea14c8f9..43f55a2188 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -55,6 +55,12 @@ __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 4294967295, so check if the value is set and return early to
+     avoid making unneeded nss lookups. */
+  if (uid == 4294967295)
+    return ENXIO;
+
   struct passwd pwd;
   struct passwd *tpwd;
   int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-16 16:18 [PATCH] getlogin_r: return early when linux sentinel value is set Jesse Hathaway
@ 2018-03-19 15:03 ` Jesse Hathaway
  2018-03-20  8:00 ` Adhemerval Zanella
  1 sibling, 0 replies; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-19 15:03 UTC (permalink / raw)
  To: libc-alpha

This is my first time submitting a patch, so any feedback would be
very much appreciated.

On Fri, Mar 16, 2018 at 11:18 AM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
> When there is no login uid Linux sets /proc/self/loginid to the sentinel
> value of 4294967295. If this is set we can return early and avoid
> needlessly looking up the sentinel value in any configured nss
> databases.
>
> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
> b/sysdeps/unix/sysv/linux/getlogin_r.c
> index 73ea14c8f9..43f55a2188 100644
> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> @@ -55,6 +55,12 @@ __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 4294967295, so check if the value is set and return early to
> +     avoid making unneeded nss lookups. */
> +  if (uid == 4294967295)
> +    return ENXIO;
> +
>    struct passwd pwd;
>    struct passwd *tpwd;
>    int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-16 16:18 [PATCH] getlogin_r: return early when linux sentinel value is set Jesse Hathaway
  2018-03-19 15:03 ` Jesse Hathaway
@ 2018-03-20  8:00 ` Adhemerval Zanella
  2018-03-20  9:05   ` Andreas Schwab
  2018-03-20 17:52   ` Jesse Hathaway
  1 sibling, 2 replies; 18+ messages in thread
From: Adhemerval Zanella @ 2018-03-20  8:00 UTC (permalink / raw)
  To: libc-alpha



On 17/03/2018 00:18, Jesse Hathaway wrote:
> When there is no login uid Linux sets /proc/self/loginid to the sentinel
> value of 4294967295. If this is set we can return early and avoid
> needlessly looking up the sentinel value in any configured nss
> databases.

The change is short enough so I think it won't require a copyright
assignment.  However it does require a ChangeLog entry, could you please
resend the patch with a proper one?

> 
> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
> b/sysdeps/unix/sysv/linux/getlogin_r.c
> index 73ea14c8f9..43f55a2188 100644
> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> @@ -55,6 +55,12 @@ __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 4294967295, so check if the value is set and return early to
> +     avoid making unneeded nss lookups. */
> +  if (uid == 4294967295)
> +    return ENXIO;

I prefer to just use either (int)-1 or just 0xffffffff.  Also,
__getlogin_r_loginuid should set errno itself as for ERANGE instead
of just return its value (errno won't be set in this case and I think
it got it wrong for ENOMEM in this case).

> +
>    struct passwd pwd;
>    struct passwd *tpwd;
>    int result = 0;
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-20  8:00 ` Adhemerval Zanella
@ 2018-03-20  9:05   ` Andreas Schwab
  2018-03-20 17:52   ` Jesse Hathaway
  1 sibling, 0 replies; 18+ messages in thread
From: Andreas Schwab @ 2018-03-20  9:05 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

On Mär 20 2018, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:

> On 17/03/2018 00:18, Jesse Hathaway wrote:
>> When there is no login uid Linux sets /proc/self/loginid to the sentinel
>> value of 4294967295. If this is set we can return early and avoid
>> needlessly looking up the sentinel value in any configured nss
>> databases.
>
> The change is short enough so I think it won't require a copyright
> assignment.  However it does require a ChangeLog entry, could you please
> resend the patch with a proper one?
>
>> 
>> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
>> b/sysdeps/unix/sysv/linux/getlogin_r.c
>> index 73ea14c8f9..43f55a2188 100644
>> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
>> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
>> @@ -55,6 +55,12 @@ __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 4294967295, so check if the value is set and return early to
>> +     avoid making unneeded nss lookups. */
>> +  if (uid == 4294967295)
>> +    return ENXIO;
>
> I prefer to just use either (int)-1 or just 0xffffffff.

That should be (uid_t) -1.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-20  8:00 ` Adhemerval Zanella
  2018-03-20  9:05   ` Andreas Schwab
@ 2018-03-20 17:52   ` Jesse Hathaway
  2018-03-20 18:30     ` Andreas Schwab
  1 sibling, 1 reply; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-20 17:52 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

Thanks for the review Adhemerval:

On Tue, Mar 20, 2018 at 3:00 AM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
> The change is short enough so I think it won't require a copyright
> assignment.  However it does require a ChangeLog entry, could you please
> resend the patch with a proper one?

added

> > diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
> > b/sysdeps/unix/sysv/linux/getlogin_r.c
> > index 73ea14c8f9..43f55a2188 100644
> > --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> > +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> > @@ -55,6 +55,12 @@ __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 4294967295, so check if the value is set and return early to
> > +     avoid making unneeded nss lookups. */
> > +  if (uid == 4294967295)
> > +    return ENXIO;
>
> I prefer to just use either (int)-1 or just 0xffffffff.

changed to (uid_t) - 1

> Also,
> __getlogin_r_loginuid should set errno itself as for ERANGE instead
> of just return its value (errno won't be set in this case and I think
> it got it wrong for ENOMEM in this case).

Would you be so kind as to explain this a little more to someone with
very little C experience. I returned the errno value because the
comment on the function indicates that is what the caller expects:

/* Try to determine login name from /proc/self/loginuid and return 0
   if successful.  If /proc/self/loginuid cannot be read return -1.
   Otherwise return the error number.  */

and getlogin when it calls __getlogin_r_loginuid, only checks the
return value, and not the errno value

Thanks, Jesse

Updated patch:

From 7ddef30f32b30cd7579ff4b0ea666862022aa0ec Mon Sep 17 00:00:00 2001
From: Jesse Hathaway <jesse@mbuki-mvuki.org>
Date: Fri, 16 Mar 2018 10:46:50 -0500
Subject: [PATCH] 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.

diff --git a/ChangeLog b/ChangeLog
index 3399e567b8..1ceff1c094 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-20  Jesse Hathaway  <jesse@mbuki-mvuki.org>  (tiny change)
+
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): return early
+ when linux sentinel value is set.
+
 2018-03-20  Samuel Thibault  <samuel.thibault@ens-lyon.org>

  * manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
b/sysdeps/unix/sysv/linux/getlogin_r.c
index 73ea14c8f9..8f0e997d43 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -55,6 +55,12 @@ __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)
+    return ENXIO;
+
   struct passwd pwd;
   struct passwd *tpwd;
   int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-20 17:52   ` Jesse Hathaway
@ 2018-03-20 18:30     ` Andreas Schwab
  2018-03-21 21:28       ` Jesse Hathaway
  0 siblings, 1 reply; 18+ messages in thread
From: Andreas Schwab @ 2018-03-20 18:30 UTC (permalink / raw)
  To: Jesse Hathaway; +Cc: Adhemerval Zanella, libc-alpha

On Mär 20 2018, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:

>> Also,
>> __getlogin_r_loginuid should set errno itself as for ERANGE instead
>> of just return its value (errno won't be set in this case and I think
>> it got it wrong for ENOMEM in this case).
>
> Would you be so kind as to explain this a little more to someone with
> very little C experience. I returned the errno value because the
> comment on the function indicates that is what the caller expects:
>
> /* Try to determine login name from /proc/self/loginuid and return 0
>    if successful.  If /proc/self/loginuid cannot be read return -1.
>    Otherwise return the error number.  */
>
> and getlogin when it calls __getlogin_r_loginuid, only checks the
> return value, and not the errno value

Depends on whether you want the linux __getlogin_r to fall back to the
generic __getlogin_r.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-20 18:30     ` Andreas Schwab
@ 2018-03-21 21:28       ` Jesse Hathaway
  2018-03-22  6:14         ` Adhemerval Zanella
  2018-03-22 17:35         ` Andreas Schwab
  0 siblings, 2 replies; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-21 21:28 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Adhemerval Zanella, libc-alpha

On Tue, Mar 20, 2018 at 1:30 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> Depends on whether you want the linux __getlogin_r to fall back to the
> generic __getlogin_r.

Thanks, updated patch below:

From 04a50b5ee857aa33e1527d70f0676b6daf5a036c Mon Sep 17 00:00:00 2001
From: Jesse Hathaway <jesse@mbuki-mvuki.org>
Date: Fri, 16 Mar 2018 10:46:50 -0500
Subject: [PATCH] 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.

diff --git a/ChangeLog b/ChangeLog
index 3399e567b8..1ceff1c094 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-20  Jesse Hathaway  <jesse@mbuki-mvuki.org>  (tiny change)
+
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): return early
+ when linux sentinel value is set.
+
 2018-03-20  Samuel Thibault  <samuel.thibault@ens-lyon.org>

  * manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
b/sysdeps/unix/sysv/linux/getlogin_r.c
index 73ea14c8f9..1f90c1ca2d 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -55,6 +55,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;
+    }
+
   struct passwd pwd;
   struct passwd *tpwd;
   int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-21 21:28       ` Jesse Hathaway
@ 2018-03-22  6:14         ` Adhemerval Zanella
  2018-03-22 13:49           ` Jesse Hathaway
  2018-03-22 17:35         ` Andreas Schwab
  1 sibling, 1 reply; 18+ messages in thread
From: Adhemerval Zanella @ 2018-03-22  6:14 UTC (permalink / raw)
  To: Jesse Hathaway, Andreas Schwab; +Cc: libc-alpha



On 22/03/2018 05:27, Jesse Hathaway wrote:
> On Tue, Mar 20, 2018 at 1:30 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
>> Depends on whether you want the linux __getlogin_r to fall back to the
>> generic __getlogin_r.
> 
> Thanks, updated patch below:
> 
> From 04a50b5ee857aa33e1527d70f0676b6daf5a036c Mon Sep 17 00:00:00 2001
> From: Jesse Hathaway <jesse@mbuki-mvuki.org>
> Date: Fri, 16 Mar 2018 10:46:50 -0500
> Subject: [PATCH] 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.

LGTM with CL bit fixed below.  Do you need someone to push it for you?

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> 
> diff --git a/ChangeLog b/ChangeLog
> index 3399e567b8..1ceff1c094 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2018-03-20  Jesse Hathaway  <jesse@mbuki-mvuki.org>  (tiny change)
> +
> + * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): return early
> + when linux sentinel value is set.

It should contain a tab first and respect the maximum line size of 78, as:

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


> +
>  2018-03-20  Samuel Thibault  <samuel.thibault@ens-lyon.org>
> 
>   * manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
> b/sysdeps/unix/sysv/linux/getlogin_r.c
> index 73ea14c8f9..1f90c1ca2d 100644
> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> @@ -55,6 +55,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;
> +    }
> +
>    struct passwd pwd;
>    struct passwd *tpwd;
>    int result = 0;
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-22  6:14         ` Adhemerval Zanella
@ 2018-03-22 13:49           ` Jesse Hathaway
  0 siblings, 0 replies; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-22 13:49 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: Andreas Schwab, libc-alpha

[-- Attachment #1: Type: text/plain, Size: 286 bytes --]

On Thu, Mar 22, 2018 at 1:14 AM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:

> LGTM with CL bit fixed below.  Do you need someone to push it for you?

Thanks for the review, if you could push it that would be great, updated
patch attached which fixes the changelog entry

[-- Attachment #2: getlogin_r.c.patch --]
[-- Type: text/x-patch, Size: 1565 bytes --]

commit 2fe96a5e58bb1b4ab379d1e7a85925bd83755cf7
Author: Jesse Hathaway <jesse@mbuki-mvuki.org>
Date:   Fri Mar 16 10:46:50 2018 -0500

    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.

diff --git a/ChangeLog b/ChangeLog
index 3399e567b8..5d776d995f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-20  Jesse Hathaway  <jesse@mbuki-mvuki.org>  (tiny change)
+
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
+	early when linux sentinel value is set.
+
 2018-03-20  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 73ea14c8f9..1f90c1ca2d 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -55,6 +55,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;
+    }
+
   struct passwd pwd;
   struct passwd *tpwd;
   int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-21 21:28       ` Jesse Hathaway
  2018-03-22  6:14         ` Adhemerval Zanella
@ 2018-03-22 17:35         ` Andreas Schwab
  2018-03-22 19:30           ` Jesse Hathaway
  1 sibling, 1 reply; 18+ messages in thread
From: Andreas Schwab @ 2018-03-22 17:35 UTC (permalink / raw)
  To: Jesse Hathaway; +Cc: Adhemerval Zanella, libc-alpha

On Mär 21 2018, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:

> +  /* 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)

No space after unary operator.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-22 17:35         ` Andreas Schwab
@ 2018-03-22 19:30           ` Jesse Hathaway
  2018-03-26 14:22             ` Jesse Hathaway
  0 siblings, 1 reply; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-22 19:30 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Adhemerval Zanella, libc-alpha

[-- Attachment #1: Type: text/plain, Size: 197 bytes --]

On Thu, Mar 22, 2018 at 12:35 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> On Mär 21 2018, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>> +  if (uid == (uid_t) - 1)

fixed, attached

[-- Attachment #2: getlogin_r.c.patch --]
[-- Type: text/x-patch, Size: 1562 bytes --]

commit 7d60c6ab90d23bab16adc2809de95f99e84862d5
Author: Jesse Hathaway <jesse@mbuki-mvuki.org>
Date:   Fri Mar 16 10:46:50 2018 -0500

    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.

diff --git a/ChangeLog b/ChangeLog
index 3399e567b8..5d776d995f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-20  Jesse Hathaway  <jesse@mbuki-mvuki.org>  (tiny change)
+
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
+	early when linux sentinel value is set.
+
 2018-03-20  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 73ea14c8f9..14587712a7 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -55,6 +55,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;
+    }
+
   struct passwd pwd;
   struct passwd *tpwd;
   int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-22 19:30           ` Jesse Hathaway
@ 2018-03-26 14:22             ` Jesse Hathaway
  2018-03-26 16:30               ` Adhemerval Zanella
  0 siblings, 1 reply; 18+ messages in thread
From: Jesse Hathaway @ 2018-03-26 14:22 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Adhemerval Zanella, libc-alpha

[-- Attachment #1: Type: text/plain, Size: 156 bytes --]

On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
> fixed, attached

Adhemerval Zanella would you be able to push this for me?

[-- Attachment #2: getlogin_r.c.patch --]
[-- Type: text/x-patch, Size: 1562 bytes --]

commit 7d60c6ab90d23bab16adc2809de95f99e84862d5
Author: Jesse Hathaway <jesse@mbuki-mvuki.org>
Date:   Fri Mar 16 10:46:50 2018 -0500

    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.

diff --git a/ChangeLog b/ChangeLog
index 3399e567b8..5d776d995f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-20  Jesse Hathaway  <jesse@mbuki-mvuki.org>  (tiny change)
+
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
+	early when linux sentinel value is set.
+
 2018-03-20  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 73ea14c8f9..14587712a7 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -55,6 +55,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;
+    }
+
   struct passwd pwd;
   struct passwd *tpwd;
   int result = 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-26 14:22             ` Jesse Hathaway
@ 2018-03-26 16:30               ` Adhemerval Zanella
  2018-03-28  0:37                 ` Adhemerval Zanella
  0 siblings, 1 reply; 18+ messages in thread
From: Adhemerval Zanella @ 2018-03-26 16:30 UTC (permalink / raw)
  To: Jesse Hathaway; +Cc: Andreas Schwab, libc-alpha

I will take care of it today, thanks for remind me.

Sent from my iPhone

> On 26 Mar 2018, at 11:22, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
> 
>> On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>> fixed, attached
> 
> Adhemerval Zanella would you be able to push this for me?
> <getlogin_r.c.patch>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-26 16:30               ` Adhemerval Zanella
@ 2018-03-28  0:37                 ` Adhemerval Zanella
  2018-04-03 10:46                   ` Florian Weimer
  0 siblings, 1 reply; 18+ messages in thread
From: Adhemerval Zanella @ 2018-03-28  0:37 UTC (permalink / raw)
  To: Jesse Hathaway; +Cc: Andreas Schwab, libc-alpha

Pushed upstream.

On 26/03/2018 13:30, Adhemerval Zanella wrote:
> I will take care of it today, thanks for remind me.
> 
> Sent from my iPhone
> 
>> On 26 Mar 2018, at 11:22, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>
>>> On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>> fixed, attached
>>
>> Adhemerval Zanella would you be able to push this for me?
>> <getlogin_r.c.patch>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-03-28  0:37                 ` Adhemerval Zanella
@ 2018-04-03 10:46                   ` Florian Weimer
  2018-04-03 11:41                     ` Adhemerval Zanella
  0 siblings, 1 reply; 18+ messages in thread
From: Florian Weimer @ 2018-04-03 10:46 UTC (permalink / raw)
  To: Adhemerval Zanella, Jesse Hathaway; +Cc: Andreas Schwab, libc-alpha

On 03/28/2018 02:37 AM, Adhemerval Zanella wrote:
> Pushed upstream.
> 
> On 26/03/2018 13:30, Adhemerval Zanella wrote:
>> I will take care of it today, thanks for remind me.
>>
>> Sent from my iPhone
>>
>>> On 26 Mar 2018, at 11:22, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>
>>>> On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>> fixed, attached
>>>
>>> Adhemerval Zanella would you be able to push this for me?
>>> <getlogin_r.c.patch>

If this has user-visible impact, it should have a bug in Bugzilla, 
referenced from the ChangeLog entry.

Thanks,
Florian

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-04-03 10:46                   ` Florian Weimer
@ 2018-04-03 11:41                     ` Adhemerval Zanella
  2018-04-03 11:45                       ` Florian Weimer
  0 siblings, 1 reply; 18+ messages in thread
From: Adhemerval Zanella @ 2018-04-03 11:41 UTC (permalink / raw)
  To: Florian Weimer, Jesse Hathaway; +Cc: Andreas Schwab, libc-alpha



On 03/04/2018 07:46, Florian Weimer wrote:
> On 03/28/2018 02:37 AM, Adhemerval Zanella wrote:
>> Pushed upstream.
>>
>> On 26/03/2018 13:30, Adhemerval Zanella wrote:
>>> I will take care of it today, thanks for remind me.
>>>
>>> Sent from my iPhone
>>>
>>>> On 26 Mar 2018, at 11:22, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>>
>>>>> On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>>> fixed, attached
>>>>
>>>> Adhemerval Zanella would you be able to push this for me?
>>>> <getlogin_r.c.patch>
> 
> If this has user-visible impact, it should have a bug in Bugzilla, referenced from the ChangeLog entry.
>

My understanding it is optimization to avoid access nss in
case of invalid uid.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-04-03 11:41                     ` Adhemerval Zanella
@ 2018-04-03 11:45                       ` Florian Weimer
  2018-04-03 11:53                         ` Adhemerval Zanella
  0 siblings, 1 reply; 18+ messages in thread
From: Florian Weimer @ 2018-04-03 11:45 UTC (permalink / raw)
  To: Adhemerval Zanella, Jesse Hathaway; +Cc: Andreas Schwab, libc-alpha

On 04/03/2018 01:40 PM, Adhemerval Zanella wrote:
> 
> 
> On 03/04/2018 07:46, Florian Weimer wrote:
>> On 03/28/2018 02:37 AM, Adhemerval Zanella wrote:
>>> Pushed upstream.
>>>
>>> On 26/03/2018 13:30, Adhemerval Zanella wrote:
>>>> I will take care of it today, thanks for remind me.
>>>>
>>>> Sent from my iPhone
>>>>
>>>>> On 26 Mar 2018, at 11:22, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>>>
>>>>>> On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>>>> fixed, attached
>>>>>
>>>>> Adhemerval Zanella would you be able to push this for me?
>>>>> <getlogin_r.c.patch>
>>
>> If this has user-visible impact, it should have a bug in Bugzilla, referenced from the ChangeLog entry.

> My understanding it is optimization to avoid access nss in
> case of invalid uid.

There's a Launchpad bug that suggests a very visible difference in behavior:

https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1760713

Thanks,
Florian

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] getlogin_r: return early when linux sentinel value is set
  2018-04-03 11:45                       ` Florian Weimer
@ 2018-04-03 11:53                         ` Adhemerval Zanella
  0 siblings, 0 replies; 18+ messages in thread
From: Adhemerval Zanella @ 2018-04-03 11:53 UTC (permalink / raw)
  To: Florian Weimer, Jesse Hathaway; +Cc: Andreas Schwab, libc-alpha



On 03/04/2018 08:44, Florian Weimer wrote:
> On 04/03/2018 01:40 PM, Adhemerval Zanella wrote:
>>
>>
>> On 03/04/2018 07:46, Florian Weimer wrote:
>>> On 03/28/2018 02:37 AM, Adhemerval Zanella wrote:
>>>> Pushed upstream.
>>>>
>>>> On 26/03/2018 13:30, Adhemerval Zanella wrote:
>>>>> I will take care of it today, thanks for remind me.
>>>>>
>>>>> Sent from my iPhone
>>>>>
>>>>>> On 26 Mar 2018, at 11:22, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>>>>
>>>>>>> On Thu, Mar 22, 2018 at 2:30 PM, Jesse Hathaway <jesse@mbuki-mvuki.org> wrote:
>>>>>>> fixed, attached
>>>>>>
>>>>>> Adhemerval Zanella would you be able to push this for me?
>>>>>> <getlogin_r.c.patch>
>>>
>>> If this has user-visible impact, it should have a bug in Bugzilla, referenced from the ChangeLog entry.
> 
>> My understanding it is optimization to avoid access nss in
>> case of invalid uid.
> 
> There's a Launchpad bug that suggests a very visible difference in behavior:
> 
> https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1760713
> 
> Thanks,
> Florian

Alright, https://sourceware.org/bugzilla/show_bug.cgi?id=23024

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-04-03 11:53 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-16 16:18 [PATCH] getlogin_r: return early when linux sentinel value is set Jesse Hathaway
2018-03-19 15:03 ` Jesse Hathaway
2018-03-20  8:00 ` Adhemerval Zanella
2018-03-20  9:05   ` Andreas Schwab
2018-03-20 17:52   ` Jesse Hathaway
2018-03-20 18:30     ` Andreas Schwab
2018-03-21 21:28       ` Jesse Hathaway
2018-03-22  6:14         ` Adhemerval Zanella
2018-03-22 13:49           ` Jesse Hathaway
2018-03-22 17:35         ` Andreas Schwab
2018-03-22 19:30           ` Jesse Hathaway
2018-03-26 14:22             ` Jesse Hathaway
2018-03-26 16:30               ` Adhemerval Zanella
2018-03-28  0:37                 ` Adhemerval Zanella
2018-04-03 10:46                   ` Florian Weimer
2018-04-03 11:41                     ` Adhemerval Zanella
2018-04-03 11:45                       ` Florian Weimer
2018-04-03 11:53                         ` Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).