diff options
author | Jaakko Heinonen <jh@FreeBSD.org> | 2012-08-14 19:16:30 +0000 |
---|---|---|
committer | Jaakko Heinonen <jh@FreeBSD.org> | 2012-08-14 19:16:30 +0000 |
commit | 2f0ac2593beb9575699aa93790c660264fbe18a3 (patch) | |
tree | 7ed24cf88c717783b2a851f48c7b624ff72a64c1 /sys/kern/kern_environment.c | |
parent | e2082935f0c31a55bae359035940e634b8c70206 (diff) | |
download | src-2f0ac2593beb9575699aa93790c660264fbe18a3.tar.gz src-2f0ac2593beb9575699aa93790c660264fbe18a3.zip |
Reserve room for the terminating NUL when setting or getting kernel
environment variables. KENV_MNAMELEN and KENV_MVALLEN doesn't include
space for the terminating NUL.
Notes
Notes:
svn path=/head/; revision=239257
Diffstat (limited to 'sys/kern/kern_environment.c')
-rw-r--r-- | sys/kern/kern_environment.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/kern/kern_environment.c b/sys/kern/kern_environment.c index 1e3128516190..d60299b31e54 100644 --- a/sys/kern/kern_environment.c +++ b/sys/kern/kern_environment.c @@ -143,9 +143,9 @@ sys_kenv(td, uap) break; } - name = malloc(KENV_MNAMELEN, M_TEMP, M_WAITOK); + name = malloc(KENV_MNAMELEN + 1, M_TEMP, M_WAITOK); - error = copyinstr(uap->name, name, KENV_MNAMELEN, NULL); + error = copyinstr(uap->name, name, KENV_MNAMELEN + 1, NULL); if (error) goto done; @@ -176,8 +176,8 @@ sys_kenv(td, uap) error = EINVAL; goto done; } - if (len > KENV_MVALLEN) - len = KENV_MVALLEN; + if (len > KENV_MVALLEN + 1) + len = KENV_MVALLEN + 1; value = malloc(len, M_TEMP, M_WAITOK); error = copyinstr(uap->value, value, len, NULL); if (error) { @@ -389,10 +389,10 @@ setenv(const char *name, const char *value) KENV_CHECK; namelen = strlen(name) + 1; - if (namelen > KENV_MNAMELEN) + if (namelen > KENV_MNAMELEN + 1) return (-1); vallen = strlen(value) + 1; - if (vallen > KENV_MVALLEN) + if (vallen > KENV_MVALLEN + 1) return (-1); buf = malloc(namelen + vallen, M_KENV, M_WAITOK); sprintf(buf, "%s=%s", name, value); |