Permalink
Browse files

MFC 253887,253977:

- Use pget(PGET_CANDEBUG | PGET_NOTWEXIT) to determine if the specified
  PID is valid for monitoring in FILEMON_SET_PID ioctl.

- Set the monitored PID to -1 when the process exits.

Suggested by:	jilles
Tested by:	sjg
Approved by:	re (kib)
  • Loading branch information...
1 parent bb9998a commit a2d054318c6fd38a40ca8642db4cc8226050336e @hrs-allbsd hrs-allbsd committed Aug 8, 2013
Showing with 8 additions and 1 deletion.
  1. +7 −1 sys/dev/filemon/filemon.c
  2. +1 −0 sys/dev/filemon/filemon_wrapper.c
@@ -180,6 +180,7 @@ filemon_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag __unused,
{
int error = 0;
struct filemon *filemon;
+ struct proc *p;
#if __FreeBSD_version < 701000
filemon = dev->si_drv1;
@@ -202,7 +203,12 @@ filemon_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag __unused,
/* Set the monitored process ID. */
case FILEMON_SET_PID:
- filemon->pid = *((pid_t *) data);
+ error = pget(*((pid_t *)data), PGET_CANDEBUG | PGET_NOTWEXIT,
+ &p);
+ if (error == 0) {
+ filemon->pid = p->p_pid;
+ PROC_UNLOCK(p);
+ }
break;
default:
@@ -574,6 +574,7 @@ filemon_wrapper_sys_exit(struct thread *td, struct sys_exit_args *uap)
(uintmax_t)now.tv_sec, (uintmax_t)now.tv_usec);
filemon_output(filemon, filemon->msgbufr, len);
+ filemon->pid = -1;
}
/* Unlock the found filemon structure. */

0 comments on commit a2d0543

Please sign in to comment.