sync with OpenBSD -current
This commit is contained in:
parent
ee61daa776
commit
e247f83c76
42 changed files with 45418 additions and 262 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_sysctl.c,v 1.437 2024/08/11 15:10:53 mvs Exp $ */
|
||||
/* $OpenBSD: kern_sysctl.c,v 1.439 2024/08/14 17:52:47 mvs Exp $ */
|
||||
/* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -252,6 +252,7 @@ sys_sysctl(struct proc *p, void *v, register_t *retval)
|
|||
fn = uvm_sysctl;
|
||||
break;
|
||||
case CTL_NET:
|
||||
dolock = 0;
|
||||
fn = net_sysctl;
|
||||
break;
|
||||
case CTL_FS:
|
||||
|
@ -306,7 +307,7 @@ char hostname[MAXHOSTNAMELEN];
|
|||
int hostnamelen;
|
||||
char domainname[MAXHOSTNAMELEN];
|
||||
int domainnamelen;
|
||||
long hostid;
|
||||
int hostid;
|
||||
char *disknames = NULL;
|
||||
size_t disknameslen;
|
||||
struct diskstats *diskstats = NULL;
|
||||
|
@ -507,6 +508,8 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
|
|||
return (sysctl_rdstring(oldp, oldlenp, newp, version));
|
||||
case KERN_NUMVNODES: /* XXX numvnodes is a long */
|
||||
return (sysctl_rdint(oldp, oldlenp, newp, numvnodes));
|
||||
case KERN_HOSTID:
|
||||
return (sysctl_int(oldp, oldlenp, newp, newlen, &hostid));
|
||||
case KERN_CLOCKRATE:
|
||||
return (sysctl_clockrate(oldp, oldlenp, newp));
|
||||
case KERN_BOOTTIME: {
|
||||
|
@ -585,7 +588,7 @@ int
|
|||
kern_sysctl_locked(int *name, u_int namelen, void *oldp, size_t *oldlenp,
|
||||
void *newp, size_t newlen, struct proc *p)
|
||||
{
|
||||
int error, level, inthostid, stackgap;
|
||||
int error, level, stackgap;
|
||||
dev_t dev;
|
||||
extern int pool_debug;
|
||||
|
||||
|
@ -623,11 +626,6 @@ kern_sysctl_locked(int *name, u_int namelen, void *oldp, size_t *oldlenp,
|
|||
if (newp && !error)
|
||||
domainnamelen = newlen;
|
||||
return (error);
|
||||
case KERN_HOSTID:
|
||||
inthostid = hostid; /* XXX assumes sizeof long <= sizeof int */
|
||||
error = sysctl_int(oldp, oldlenp, newp, newlen, &inthostid);
|
||||
hostid = inthostid;
|
||||
return (error);
|
||||
case KERN_CONSBUF:
|
||||
if ((error = suser(p)))
|
||||
return (error);
|
||||
|
@ -1055,17 +1053,36 @@ int
|
|||
sysctl_int_lower(void *oldp, size_t *oldlenp, void *newp, size_t newlen,
|
||||
int *valp)
|
||||
{
|
||||
unsigned int oval = *valp, val = *valp;
|
||||
unsigned int oldval, newval;
|
||||
int error;
|
||||
|
||||
if (newp == NULL)
|
||||
return (sysctl_rdint(oldp, oldlenp, newp, val));
|
||||
if (oldp && *oldlenp < sizeof(int))
|
||||
return (ENOMEM);
|
||||
if (newp && newlen != sizeof(int))
|
||||
return (EINVAL);
|
||||
*oldlenp = sizeof(int);
|
||||
|
||||
if (newp) {
|
||||
if ((error = copyin(newp, &newval, sizeof(int))))
|
||||
return (error);
|
||||
do {
|
||||
oldval = atomic_load_int(valp);
|
||||
if (oldval < (unsigned int)newval)
|
||||
return (EPERM); /* do not allow raising */
|
||||
} while (atomic_cas_uint(valp, oldval, newval) != oldval);
|
||||
|
||||
if (oldp) {
|
||||
/* new value has been set although user gets error */
|
||||
if ((error = copyout(&oldval, oldp, sizeof(int))))
|
||||
return (error);
|
||||
}
|
||||
} else if (oldp) {
|
||||
oldval = atomic_load_int(valp);
|
||||
|
||||
if ((error = copyout(&oldval, oldp, sizeof(int))))
|
||||
return (error);
|
||||
}
|
||||
|
||||
if ((error = sysctl_int(oldp, oldlenp, newp, newlen, &val)))
|
||||
return (error);
|
||||
if (val > oval)
|
||||
return (EPERM); /* do not allow raising */
|
||||
*(unsigned int *)valp = val;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -1076,18 +1093,8 @@ sysctl_int_lower(void *oldp, size_t *oldlenp, void *newp, size_t newlen,
|
|||
int
|
||||
sysctl_int(void *oldp, size_t *oldlenp, void *newp, size_t newlen, int *valp)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
if (oldp && *oldlenp < sizeof(int))
|
||||
return (ENOMEM);
|
||||
if (newp && newlen != sizeof(int))
|
||||
return (EINVAL);
|
||||
*oldlenp = sizeof(int);
|
||||
if (oldp)
|
||||
error = copyout(valp, oldp, sizeof(int));
|
||||
if (error == 0 && newp)
|
||||
error = copyin(newp, valp, sizeof(int));
|
||||
return (error);
|
||||
return (sysctl_int_bounded(oldp, oldlenp, newp, newlen, valp,
|
||||
INT_MIN, INT_MAX));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue