Page MenuHomeFreeBSD

D48511.id149498.diff
No OneTemporary

D48511.id149498.diff

diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -1886,7 +1886,8 @@
{
char *tmparg;
size_t outlen;
- int error = 0, ro_string = 0;
+ int error = 0;
+ bool ro_string = false;
/*
* If the sysctl isn't writable and isn't a preallocated tunable that
@@ -1898,22 +1899,19 @@
*/
if ((oidp->oid_kind & (CTLFLAG_WR | CTLFLAG_TUN)) == 0 ||
arg2 == 0 || kdb_active) {
- arg2 = strlen((char *)arg1) + 1;
- ro_string = 1;
+ ro_string = true;
}
if (req->oldptr != NULL) {
if (ro_string) {
tmparg = arg1;
- outlen = strlen(tmparg) + 1;
} else {
tmparg = malloc(arg2, M_SYSCTLTMP, M_WAITOK);
sx_slock(&sysctlstringlock);
memcpy(tmparg, arg1, arg2);
sx_sunlock(&sysctlstringlock);
- outlen = strlen(tmparg) + 1;
}
-
+ outlen = arg2 == 0 ? (arg2 = strlen(tmparg) + 1) : strnlen(tmparg, arg2 - 1) + 1;
error = SYSCTL_OUT(req, tmparg, outlen);
if (!ro_string)
@@ -1921,7 +1919,8 @@
} else {
if (!ro_string)
sx_slock(&sysctlstringlock);
- outlen = strlen((char *)arg1) + 1;
+ tmparg = arg1;
+ outlen = arg2 == 0 ? (arg2 = strlen(tmparg) + 1) : strnlen(tmparg, arg2 - 1) + 1;
if (!ro_string)
sx_sunlock(&sysctlstringlock);
error = SYSCTL_OUT(req, NULL, outlen);

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 25, 3:59 PM (6 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30325210
Default Alt Text
D48511.id149498.diff (1 KB)

Event Timeline