Download raw body.
sysctl(2): unlock fs_sysctl()
It is the only `suid_clear' variable - atomically accessed integer.
Index: sys/kern/kern_sysctl.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_sysctl.c,v
diff -u -p -r1.450 kern_sysctl.c
--- sys/kern/kern_sysctl.c 28 Oct 2024 10:18:03 -0000 1.450
+++ sys/kern/kern_sysctl.c 30 Oct 2024 16:12:02 -0000
@@ -262,6 +262,7 @@ sys_sysctl(struct proc *p, void *v, regi
fn = net_sysctl;
break;
case CTL_FS:
+ dolock = 0;
fn = fs_sysctl;
break;
case CTL_VFS:
Index: sys/kern/vfs_subr.c
===================================================================
RCS file: /cvs/src/sys/kern/vfs_subr.c,v
diff -u -p -r1.324 vfs_subr.c
--- sys/kern/vfs_subr.c 18 Oct 2024 05:52:32 -0000 1.324
+++ sys/kern/vfs_subr.c 30 Oct 2024 16:12:02 -0000
@@ -72,6 +72,11 @@
#include "softraid.h"
+/*
+ * Locks used to protect data:
+ * a atomic
+ */
+
void sr_quiesce(void);
enum vtype iftovt_tab[16] = {
@@ -84,8 +89,8 @@ int vttoif_tab[9] = {
S_IFSOCK, S_IFIFO, S_IFMT,
};
-int prtactive = 0; /* 1 => print out reclaim of active vnodes */
-int suid_clear = 1; /* 1 => clear SUID / SGID on owner change */
+int prtactive = 0; /* 1 => print out reclaim of active vnodes */
+int suid_clear = 1; /* [a] 1 => clear SUID / SGID on owner change */
/*
* Insq/Remq for the vnode usage lists.
Index: sys/kern/vfs_syscalls.c
===================================================================
RCS file: /cvs/src/sys/kern/vfs_syscalls.c,v
diff -u -p -r1.368 vfs_syscalls.c
--- sys/kern/vfs_syscalls.c 1 Sep 2024 23:26:10 -0000 1.368
+++ sys/kern/vfs_syscalls.c 30 Oct 2024 16:12:02 -0000
@@ -2470,7 +2470,7 @@ dofchownat(struct proc *p, int fd, const
goto out;
if ((uid != -1 || gid != -1) &&
!vnoperm(vp) &&
- (suser(p) || suid_clear)) {
+ (suser(p) || atomic_load_int(&suid_clear))) {
error = VOP_GETATTR(vp, &vattr, p->p_ucred, p);
if (error)
goto out;
@@ -2523,7 +2523,7 @@ sys_lchown(struct proc *p, void *v, regi
goto out;
if ((uid != -1 || gid != -1) &&
!vnoperm(vp) &&
- (suser(p) || suid_clear)) {
+ (suser(p) || atomic_load_int(&suid_clear))) {
error = VOP_GETATTR(vp, &vattr, p->p_ucred, p);
if (error)
goto out;
@@ -2573,7 +2573,7 @@ sys_fchown(struct proc *p, void *v, regi
goto out;
if ((uid != -1 || gid != -1) &&
!vnoperm(vp) &&
- (suser(p) || suid_clear)) {
+ (suser(p) || atomic_load_int(&suid_clear))) {
error = VOP_GETATTR(vp, &vattr, p->p_ucred, p);
if (error)
goto out;
sysctl(2): unlock fs_sysctl()