Date: Fri, 12 Apr 2013 15:58:54 +0000 (UTC) From: "Jayachandran C." <jchandra@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r249408 - head/sys/kern Message-ID: <201304121558.r3CFwsb4059283@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jchandra Date: Fri Apr 12 15:58:53 2013 New Revision: 249408 URL: http://svnweb.freebsd.org/changeset/base/249408 Log: Fix kenv behavior when there is no static environment In case where there are no static kernel environment entries, the function init_dynamic_kenv() adds an incorrect entry at position 0 of the dynamic kernel environment. This in turn causes kenv(1) to print and empty list even though there are dynamic entries added later. Fix this by checking env_pos in init_dynamic_kenv() and adding dynamic entries only if there are static entries. Modified: head/sys/kern/kern_environment.c Modified: head/sys/kern/kern_environment.c ============================================================================== --- head/sys/kern/kern_environment.c Fri Apr 12 15:19:35 2013 (r249407) +++ head/sys/kern/kern_environment.c Fri Apr 12 15:58:53 2013 (r249408) @@ -231,20 +231,23 @@ init_dynamic_kenv(void *data __unused) kenvp = malloc((KENV_SIZE + 1) * sizeof(char *), M_KENV, M_WAITOK | M_ZERO); i = 0; - for (cp = kern_envp; cp != NULL; cp = kernenv_next(cp)) { - len = strlen(cp) + 1; - if (len > KENV_MNAMELEN + 1 + KENV_MVALLEN + 1) { - printf("WARNING: too long kenv string, ignoring %s\n", - cp); - continue; + if (env_pos > 0) { + for (cp = kern_envp; cp != NULL; cp = kernenv_next(cp)) { + len = strlen(cp) + 1; + if (len > KENV_MNAMELEN + 1 + KENV_MVALLEN + 1) { + printf( + "WARNING: too long kenv string, ignoring %s\n", + cp); + continue; + } + if (i < KENV_SIZE) { + kenvp[i] = malloc(len, M_KENV, M_WAITOK); + strcpy(kenvp[i++], cp); + } else + printf( + "WARNING: too many kenv strings, ignoring %s\n", + cp); } - if (i < KENV_SIZE) { - kenvp[i] = malloc(len, M_KENV, M_WAITOK); - strcpy(kenvp[i++], cp); - } else - printf( - "WARNING: too many kenv strings, ignoring %s\n", - cp); } kenvp[i] = NULL;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304121558.r3CFwsb4059283>