summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_environment.c
diff options
context:
space:
mode:
authorjh <jh@FreeBSD.org>2012-08-14 19:16:30 +0000
committerjh <jh@FreeBSD.org>2012-08-14 19:16:30 +0000
commit6e556a53175f76f814d682724c8cf24117cc7b06 (patch)
tree7ed24cf88c717783b2a851f48c7b624ff72a64c1 /sys/kern/kern_environment.c
parent0c96728586b059b0713dcf45101abcfdb8d1310a (diff)
downloadFreeBSD-src-6e556a53175f76f814d682724c8cf24117cc7b06.zip
FreeBSD-src-6e556a53175f76f814d682724c8cf24117cc7b06.tar.gz
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.
Diffstat (limited to 'sys/kern/kern_environment.c')
-rw-r--r--sys/kern/kern_environment.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/kern/kern_environment.c b/sys/kern/kern_environment.c
index 1e31285..d60299b 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);
OpenPOWER on IntegriCloud