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.
This commit is contained in:
parent
e2082935f0
commit
2f0ac2593b
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user