svn commit: r332119 - in head/lib/libc: amd64/sys gen i386/sys powerpc/sys powerpc64/sys sparc64/sys
Brooks Davis
brooks at FreeBSD.org
Fri Apr 6 17:17:36 UTC 2018
Author: brooks
Date: Fri Apr 6 17:17:34 2018
New Revision: 332119
URL: https://svnweb.freebsd.org/changeset/base/332119
Log:
Remove caching from getlogin(2).
This caching has existed since the CSRG import, but serves no obvious
purpose. Sure, setlogin() is called rarely, but calls to getlogin()
should also be infrequent. The required invalidation was not
implemented on aarch64, arm, mips, amd riscv so updates would never
occur if getlogin() was called before setlogin().
Reported by: Ali Mashtizadeh <ali at mashtizadeh.com>
Reviewed by: kib
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D14965
Deleted:
head/lib/libc/amd64/sys/setlogin.S
head/lib/libc/i386/sys/setlogin.S
head/lib/libc/powerpc/sys/setlogin.S
head/lib/libc/powerpc64/sys/setlogin.S
head/lib/libc/sparc64/sys/setlogin.S
Modified:
head/lib/libc/amd64/sys/Makefile.inc
head/lib/libc/gen/getlogin.c
head/lib/libc/i386/sys/Makefile.inc
head/lib/libc/powerpc/sys/Makefile.inc
head/lib/libc/powerpc64/sys/Makefile.inc
head/lib/libc/sparc64/sys/Makefile.inc
Modified: head/lib/libc/amd64/sys/Makefile.inc
==============================================================================
--- head/lib/libc/amd64/sys/Makefile.inc Fri Apr 6 17:16:50 2018 (r332118)
+++ head/lib/libc/amd64/sys/Makefile.inc Fri Apr 6 17:17:34 2018 (r332119)
@@ -9,7 +9,7 @@ SRCS+= \
amd64_set_gsbase.c
MDASM= vfork.S brk.S cerror.S exect.S getcontext.S \
- sbrk.S setlogin.S
+ sbrk.S
# Don't generate default code for these syscalls:
NOASM+= vfork.o
Modified: head/lib/libc/gen/getlogin.c
==============================================================================
--- head/lib/libc/gen/getlogin.c Fri Apr 6 17:16:50 2018 (r332118)
+++ head/lib/libc/gen/getlogin.c Fri Apr 6 17:17:34 2018 (r332119)
@@ -47,62 +47,33 @@ __FBSDID("$FreeBSD$");
#include "libc_private.h"
-#define THREAD_LOCK() if (__isthreaded) _pthread_mutex_lock(&logname_mutex)
-#define THREAD_UNLOCK() if (__isthreaded) _pthread_mutex_unlock(&logname_mutex)
-
extern int _getlogin(char *, int);
-int _logname_valid __hidden; /* known to setlogin() */
-static pthread_mutex_t logname_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static char *
-getlogin_basic(int *status)
-{
- static char logname[MAXLOGNAME];
-
- if (_logname_valid == 0) {
- if (_getlogin(logname, sizeof(logname)) < 0) {
- *status = errno;
- return (NULL);
- }
- _logname_valid = 1;
- }
- *status = 0;
- return (*logname ? logname : NULL);
-}
-
char *
getlogin(void)
{
- char *result;
- int status;
+ static char logname[MAXLOGNAME];
- THREAD_LOCK();
- result = getlogin_basic(&status);
- THREAD_UNLOCK();
- return (result);
+ if (_getlogin(logname, sizeof(logname)) < 0)
+ return (NULL);
+ return (logname[0] != '\0' ? logname : NULL);
}
int
getlogin_r(char *logname, int namelen)
{
- char *result;
+ char tmpname[MAXLOGNAME];
int len;
- int status;
if (namelen < 1)
return (ERANGE);
logname[0] = '\0';
- THREAD_LOCK();
- result = getlogin_basic(&status);
- if (status == 0 && result != NULL) {
- len = strlen(result) + 1;
- if (len > namelen)
- status = ERANGE;
- else
- strncpy(logname, result, len);
- }
- THREAD_UNLOCK();
- return (status);
+ if (_getlogin(tmpname, sizeof(tmpname)) < 0)
+ return (errno);
+ len = strlen(tmpname) + 1;
+ if (len > namelen)
+ return (ERANGE);
+ strlcpy(logname, tmpname, len);
+ return (0);
}
Modified: head/lib/libc/i386/sys/Makefile.inc
==============================================================================
--- head/lib/libc/i386/sys/Makefile.inc Fri Apr 6 17:16:50 2018 (r332118)
+++ head/lib/libc/i386/sys/Makefile.inc Fri Apr 6 17:17:34 2018 (r332119)
@@ -8,7 +8,7 @@ SRCS+= i386_get_fsbase.c i386_get_gsbase.c i386_get_io
i386_set_fsbase.c i386_set_gsbase.c i386_set_ioperm.c i386_set_ldt.c
MDASM= Ovfork.S brk.S cerror.S exect.S getcontext.S \
- sbrk.S setlogin.S syscall.S
+ sbrk.S syscall.S
NOASM+= vfork.o
Modified: head/lib/libc/powerpc/sys/Makefile.inc
==============================================================================
--- head/lib/libc/powerpc/sys/Makefile.inc Fri Apr 6 17:16:50 2018 (r332118)
+++ head/lib/libc/powerpc/sys/Makefile.inc Fri Apr 6 17:17:34 2018 (r332119)
@@ -1,3 +1,3 @@
# $FreeBSD$
-MDASM+= brk.S cerror.S exect.S sbrk.S setlogin.S
+MDASM+= brk.S cerror.S exect.S sbrk.S
Modified: head/lib/libc/powerpc64/sys/Makefile.inc
==============================================================================
--- head/lib/libc/powerpc64/sys/Makefile.inc Fri Apr 6 17:16:50 2018 (r332118)
+++ head/lib/libc/powerpc64/sys/Makefile.inc Fri Apr 6 17:17:34 2018 (r332119)
@@ -1,3 +1,3 @@
# $FreeBSD$
-MDASM+= brk.S cerror.S exect.S sbrk.S setlogin.S
+MDASM+= brk.S cerror.S exect.S sbrk.S
Modified: head/lib/libc/sparc64/sys/Makefile.inc
==============================================================================
--- head/lib/libc/sparc64/sys/Makefile.inc Fri Apr 6 17:16:50 2018 (r332118)
+++ head/lib/libc/sparc64/sys/Makefile.inc Fri Apr 6 17:17:34 2018 (r332119)
@@ -12,4 +12,4 @@ SRCS+= __sparc_sigtramp_setup.c \
CFLAGS+= -I${LIBC_SRCTOP}/sparc64/fpu
-MDASM+= brk.S cerror.S exect.S sbrk.S setlogin.S sigaction1.S
+MDASM+= brk.S cerror.S exect.S sbrk.S sigaction1.S
More information about the svn-src-head
mailing list