Date: Mon, 6 Jul 2015 01:42:13 +0000 (UTC) From: Patrick Kelsey <pkelsey@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r285188 - head/lib/libc/gen Message-ID: <201507060142.t661gDMi001581@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pkelsey Date: Mon Jul 6 01:42:12 2015 New Revision: 285188 URL: https://svnweb.freebsd.org/changeset/base/285188 Log: Fix sysctl(3) so it returns the intended values for all mib names in the 'user' sysctl tree, which have all been coming back 0 or empty since r240176. Differential Revision: https://reviews.freebsd.org/D2945 Reviewed by: sbruno Approved by: jmallett (mentor) MFC after: 3 days Modified: head/lib/libc/gen/sysctl.c Modified: head/lib/libc/gen/sysctl.c ============================================================================== --- head/lib/libc/gen/sysctl.c Sun Jul 5 23:24:52 2015 (r285187) +++ head/lib/libc/gen/sysctl.c Mon Jul 6 01:42:12 2015 (r285188) @@ -51,9 +51,21 @@ sysctl(const int *name, u_int namelen, v const void *newp, size_t newlen) { int retval; + size_t orig_oldlen; + orig_oldlen = oldlenp ? *oldlenp : 0; retval = __sysctl(name, namelen, oldp, oldlenp, newp, newlen); - if (retval != -1 || errno != ENOENT || name[0] != CTL_USER) + /* + * All valid names under CTL_USER have a dummy entry in the sysctl + * tree (to support name lookups and enumerations) with an + * empty/zero value, and the true value is supplied by this routine. + * For all such names, __sysctl() is used solely to validate the + * name. + * + * Return here unless there was a successful lookup for a CTL_USER + * name. + */ + if (retval || name[0] != CTL_USER) return (retval); if (newp != NULL) { @@ -67,7 +79,7 @@ sysctl(const int *name, u_int namelen, v switch (name[1]) { case USER_CS_PATH: - if (oldp && *oldlenp < sizeof(_PATH_STDPATH)) { + if (oldp && orig_oldlen < sizeof(_PATH_STDPATH)) { errno = ENOMEM; return -1; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201507060142.t661gDMi001581>