mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 09:41:03 -04:00
sysctl: fix setting net.isr.dispatch during early boot
Fix another collateral damage of r357614: netisr is initialised way before malloc() is available hence it can't use sysctl_handle_string() that allocates temporary buffer. Handle that internally in sysctl_netisr_dispatch_policy(). PR: 246114 Reported by: delphij Reviewed by: kib Approved by: kib (mentor) Differential Revision: https://reviews.freebsd.org/D24858
This commit is contained in:
parent
6bc7175f31
commit
9033ad5f15
1 changed files with 23 additions and 8 deletions
|
|
@ -345,19 +345,34 @@ static int
|
|||
sysctl_netisr_dispatch_policy(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
char tmp[NETISR_DISPATCH_POLICY_MAXSTR];
|
||||
size_t len;
|
||||
u_int dispatch_policy;
|
||||
int error;
|
||||
|
||||
netisr_dispatch_policy_to_str(netisr_dispatch_policy, tmp,
|
||||
sizeof(tmp));
|
||||
error = sysctl_handle_string(oidp, tmp, sizeof(tmp), req);
|
||||
if (error == 0 && req->newptr != NULL) {
|
||||
error = netisr_dispatch_policy_from_str(tmp,
|
||||
&dispatch_policy);
|
||||
if (error == 0 && dispatch_policy == NETISR_DISPATCH_DEFAULT)
|
||||
error = EINVAL;
|
||||
if (error == 0)
|
||||
netisr_dispatch_policy = dispatch_policy;
|
||||
/*
|
||||
* netisr is initialised very early during the boot when malloc isn't
|
||||
* available yet so we can't use sysctl_handle_string() to process
|
||||
* any non-default value that was potentially set via loader.
|
||||
*/
|
||||
if (req->newptr != NULL) {
|
||||
len = req->newlen - req->newidx;
|
||||
if (len >= NETISR_DISPATCH_POLICY_MAXSTR)
|
||||
return (EINVAL);
|
||||
error = SYSCTL_IN(req, tmp, len);
|
||||
if (error == 0) {
|
||||
tmp[len] = '\0';
|
||||
error = netisr_dispatch_policy_from_str(tmp,
|
||||
&dispatch_policy);
|
||||
if (error == 0 &&
|
||||
dispatch_policy == NETISR_DISPATCH_DEFAULT)
|
||||
error = EINVAL;
|
||||
if (error == 0)
|
||||
netisr_dispatch_policy = dispatch_policy;
|
||||
}
|
||||
} else {
|
||||
error = sysctl_handle_string(oidp, tmp, sizeof(tmp), req);
|
||||
}
|
||||
return (error);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue