Author: pfg
Date: Sat Dec 19 03:07:38 2020
New Revision: 368778
URL: https://svnweb.freebsd.org/changeset/base/368778

Log:
  login(1): when exporting variables check the result of setenv(3)
  
  When exporting a variable we correctly check all the preconditions that
  could make setenv(3) fail. Checking the setenv(3) return value seems
  redundant, but given that login(1) is critical, it doesn't hurt to have
  a post-check.
  
  This change is based on the "Principles of Secure Coding" course by
  Matthew Bishop, PhD., which specifically discusses this code in FreeBSD.
  
  (This change redoes r368776 due to a silly mistake)

Modified:
  head/usr.bin/login/login.c

Modified: head/usr.bin/login/login.c
==============================================================================
--- head/usr.bin/login/login.c  Sat Dec 19 02:42:14 2020        (r368777)
+++ head/usr.bin/login/login.c  Sat Dec 19 03:07:38 2020        (r368778)
@@ -793,6 +793,7 @@ export(const char *s)
        char *p;
        const char **pp;
        size_t n;
+       int rv;
 
        if (strlen(s) > 1024 || (p = strchr(s, '=')) == NULL)
                return (0);
@@ -804,8 +805,10 @@ export(const char *s)
                        return (0);
        }
        *p = '\0';
-       (void)setenv(s, p + 1, 1);
+       rv = setenv(s, p + 1, 1);
        *p = '=';
+       if (rv == -1)
+               return (0);
        return (1);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to