From patchwork Tue Mar 20 17:52:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesse Hathaway X-Patchwork-Id: 26390 Received: (qmail 36152 invoked by alias); 20 Mar 2018 17:52:20 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 36137 invoked by uid 89); 20 Mar 2018 17:52:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=tiny X-HELO: mail-pg0-f43.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=M/5PRBzmWAyiK4xjQX+WnzgunJeQDOCrLGtxbLq+pjQ=; b=boGy94ysHRk/5jfmn6hlXxSce0VM2qataH2s+XDlZ3590isQztuyHRN3jRV8F8nMVH DH5YOMdIHtPGClGN1ylw6/6GU0g5wSjuChFyhqypqla+kZmE0/TQdHiaFMvnqGE97l8p 5bzOJSJjT2g16Niard9gBG4Clyh3kvkAVOx7gW2tPuMwTFmHPddWFehmrGti7oLR7vra R7r5vwACrur6TitKdv8xUoJp4++LTPNC4dJ5C446Q6GNrlZNzNyFlWKG72TSQXkzUXBR Iu8wQQMN0Cxl18LVL3au7UKDRHTtQbzr3l6mWcVLa816M2epxRbEKm1l7Ovih+Iz9XEy CSRA== X-Gm-Message-State: AElRT7HVK7Y47K1OKLXWLbR9sBQ4aHveCu0JoENfQOD7dGHPJCjNp9F6 ZvXCvfDBDMUlkOzoXqAJRYDDsLkxME4EuxMUJG5vNoyV X-Google-Smtp-Source: AG47ELt1/Z2NOjjHWzYuY66Cfs5wCIDL5O6cIYBVfgd9fbhyjMRRECf3JWJCX9Ems+p7o1trkr98ZvK0ZjUoezpmSPQ= X-Received: by 10.99.163.9 with SMTP id s9mr6276491pge.179.1521568336619; Tue, 20 Mar 2018 10:52:16 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <73b04097-ef36-b597-4f7c-2e73c6eb9fa3@linaro.org> References: <73b04097-ef36-b597-4f7c-2e73c6eb9fa3@linaro.org> From: Jesse Hathaway Date: Tue, 20 Mar 2018 12:52:15 -0500 Message-ID: Subject: Re: [PATCH] getlogin_r: return early when linux sentinel value is set To: Adhemerval Zanella Cc: libc-alpha@sourceware.org Thanks for the review Adhemerval: On Tue, Mar 20, 2018 at 3:00 AM, Adhemerval Zanella 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 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 (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 * 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;