Add a sysctl to set and retrieve binary osreldate of another process.
Suggested by: kib Reviewed by: kib MFC after: 2 weeks
This commit is contained in:
parent
5fc747bf78
commit
903712c99c
@ -2499,6 +2499,52 @@ sysctl_kern_proc_umask(SYSCTL_HANDLER_ARGS)
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* This sysctl allows a process to set and retrieve binary osreldate of
|
||||
* another process.
|
||||
*/
|
||||
static int
|
||||
sysctl_kern_proc_osrel(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
int *name = (int *)arg1;
|
||||
u_int namelen = arg2;
|
||||
struct proc *p;
|
||||
int flags, error, osrel;
|
||||
|
||||
if (namelen != 1)
|
||||
return (EINVAL);
|
||||
|
||||
if (req->newptr != NULL && req->newlen != sizeof(osrel))
|
||||
return (EINVAL);
|
||||
|
||||
flags = PGET_HOLD | PGET_NOTWEXIT;
|
||||
if (req->newptr != NULL)
|
||||
flags |= PGET_CANDEBUG;
|
||||
else
|
||||
flags |= PGET_CANSEE;
|
||||
error = pget((pid_t)name[0], flags, &p);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
|
||||
error = SYSCTL_OUT(req, &p->p_osrel, sizeof(p->p_osrel));
|
||||
if (error != 0)
|
||||
goto errout;
|
||||
|
||||
if (req->newptr != NULL) {
|
||||
error = SYSCTL_IN(req, &osrel, sizeof(osrel));
|
||||
if (error != 0)
|
||||
goto errout;
|
||||
if (osrel < 0) {
|
||||
error = EINVAL;
|
||||
goto errout;
|
||||
}
|
||||
p->p_osrel = osrel;
|
||||
}
|
||||
errout:
|
||||
PRELE(p);
|
||||
return (error);
|
||||
}
|
||||
|
||||
SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table");
|
||||
|
||||
SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT|
|
||||
@ -2603,3 +2649,7 @@ static SYSCTL_NODE(_kern_proc, KERN_PROC_PS_STRINGS, ps_strings, CTLFLAG_RD |
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_UMASK, umask, CTLFLAG_RD |
|
||||
CTLFLAG_MPSAFE, sysctl_kern_proc_umask, "Process umask");
|
||||
|
||||
static SYSCTL_NODE(_kern_proc, KERN_PROC_OSREL, osrel, CTLFLAG_RW |
|
||||
CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, sysctl_kern_proc_osrel,
|
||||
"Process binary osreldate");
|
||||
|
@ -565,6 +565,7 @@ SYSCTL_ALLOWED_TYPES(UINT64, uint64_t *a; unsigned long long *b; );
|
||||
#define KERN_PROC_RLIMIT 37 /* process resource limits */
|
||||
#define KERN_PROC_PS_STRINGS 38 /* get ps_strings location */
|
||||
#define KERN_PROC_UMASK 39 /* process umask */
|
||||
#define KERN_PROC_OSREL 40 /* osreldate for process binary */
|
||||
|
||||
/*
|
||||
* KERN_IPC identifiers
|
||||
|
Loading…
Reference in New Issue
Block a user