mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
- Add conditional Giant locking around the vrele() in
sysctl_kern_proc_pathname(). - Mark all the kern.proc.* sysctls as MPSAFE. Submitted by: csjp (2)
This commit is contained in:
parent
1e99191d39
commit
24f87fdbe8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=187657
|
@ -1280,7 +1280,7 @@ sysctl_kern_proc_pathname(SYSCTL_HANDLER_ARGS)
|
|||
struct proc *p;
|
||||
struct vnode *vp;
|
||||
char *retbuf, *freebuf;
|
||||
int error;
|
||||
int error, vfslocked;
|
||||
|
||||
if (arglen != 1)
|
||||
return (EINVAL);
|
||||
|
@ -1306,7 +1306,9 @@ sysctl_kern_proc_pathname(SYSCTL_HANDLER_ARGS)
|
|||
if (*pidp != -1)
|
||||
PROC_UNLOCK(p);
|
||||
error = vn_fullpath(req->td, vp, &retbuf, &freebuf);
|
||||
vfslocked = VFS_LOCK_GIANT(vp->v_mount);
|
||||
vrele(vp);
|
||||
VFS_UNLOCK_GIANT(vfslocked);
|
||||
if (error)
|
||||
return (error);
|
||||
error = SYSCTL_OUT(req, retbuf, strlen(retbuf) + 1);
|
||||
|
@ -1793,82 +1795,85 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS)
|
|||
|
||||
SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table");
|
||||
|
||||
SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT,
|
||||
0, 0, sysctl_kern_proc, "S,proc", "Return entire process table");
|
||||
SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT|
|
||||
CTLFLAG_MPSAFE, 0, 0, sysctl_kern_proc, "S,proc",
|
||||
"Return entire process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_RGID, rgid, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_RGID, rgid, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_SESSION, sid, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_SESSION, sid, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid, CTLFLAG_RD,
|
||||
sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc, CTLFLAG_RD,
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc, CTLFLAG_RD | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc, "Return process table, no threads");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args,
|
||||
CTLFLAG_RW | CTLFLAG_ANYBODY,
|
||||
CTLFLAG_RW | CTLFLAG_ANYBODY | CTLFLAG_MPSAFE,
|
||||
sysctl_kern_proc_args, "Process argument list");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PATHNAME, pathname, CTLFLAG_RD,
|
||||
sysctl_kern_proc_pathname, "Process executable path");
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_PATHNAME, pathname, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc_pathname, "Process executable path");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD,
|
||||
sysctl_kern_proc_sv_name, "Process syscall vector name (ABI type)");
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc_sv_name,
|
||||
"Process syscall vector name (ABI type)");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_GID | KERN_PROC_INC_THREAD), gid_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_PGRP | KERN_PROC_INC_THREAD), pgrp_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_RGID | KERN_PROC_INC_THREAD), rgid_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_SESSION | KERN_PROC_INC_THREAD),
|
||||
sid_td, CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
sid_td, CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_TTY | KERN_PROC_INC_THREAD), tty_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_UID | KERN_PROC_INC_THREAD), uid_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_RUID | KERN_PROC_INC_THREAD), ruid_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_PID | KERN_PROC_INC_THREAD), pid_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Process table");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, (KERN_PROC_PROC | KERN_PROC_INC_THREAD), proc_td,
|
||||
CTLFLAG_RD, sysctl_kern_proc, "Return process table, no threads");
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc,
|
||||
"Return process table, no threads");
|
||||
|
||||
#ifdef COMPAT_FREEBSD7
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_OVMMAP, ovmmap, CTLFLAG_RD,
|
||||
sysctl_kern_proc_ovmmap, "Old Process vm map entries");
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_OVMMAP, ovmmap, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc_ovmmap, "Old Process vm map entries");
|
||||
#endif
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_VMMAP, vmmap, CTLFLAG_RD,
|
||||
sysctl_kern_proc_vmmap, "Process vm map entries");
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_VMMAP, vmmap, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc_vmmap, "Process vm map entries");
|
||||
|
||||
#if defined(STACK) || defined(DDB)
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_KSTACK, kstack, CTLFLAG_RD,
|
||||
sysctl_kern_proc_kstack, "Process kernel stacks");
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_KSTACK, kstack, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc_kstack, "Process kernel stacks");
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue