From 75dbde9b57c0bb76927ad16b4f1b65aa0e9eb5f4 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Tue, 8 Mar 2016 13:36:00 -0800 Subject: su: Segmentation Fault on unknown numerical uids (cherry pick from commit 45948f910c69d354cc3f7e81631445d83ebadc3d) e.g. su 2999,2999,2999 echo hello Segmentation Fault return from getpwuid is NULL. KISS we opt to unset LOGNAME and USER Change-Id: I7e7eddacfd6857f83482727eb5ec5c51b9170039 --- su/su.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'su') diff --git a/su/su.c b/su/su.c index d932c1ba..ea61f93d 100644 --- a/su/su.c +++ b/su/su.c @@ -122,8 +122,13 @@ int main(int argc, char** argv) { setenv("PATH", _PATH_DEFPATH, 1); unsetenv("IFS"); struct passwd* pw = getpwuid(uid); - setenv("LOGNAME", pw->pw_name, 1); - setenv("USER", pw->pw_name, 1); + if (pw) { + setenv("LOGNAME", pw->pw_name, 1); + setenv("USER", pw->pw_name, 1); + } else { + unsetenv("LOGNAME"); + unsetenv("USER"); + } // Set up the arguments for exec. char* exec_args[argc + 1]; // Having too much space is fine. -- cgit v1.2.3