tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: In-kernel process exit hooks?



On Fri, 8 Jan 2016, Taylor R Campbell wrote:

  Date: Fri, 8 Jan 2016 16:52:28 +0800 (PHT)
  From: Paul Goyette <paul%whooppee.com@localhost>

  Robert Elz wrote:

  > That is, instead of a fd_getfile() without an (almost immediate)
  > fd_putfile() so keeping ff_refcount incremented, in filemon, just do
  >
  >        fp = fd_getfile(...);
  >        fp->f_count++;
  >        fd_putfile(...);
  >
  > so filemon has a proper reference to the file*.   When it is done, it
  > just closes it, like any other file would be closed (which decrements
  > f_count and frees the struct file if it goes to 0).

  Option 4 works!  See attached diffs.  Thanks, kre!

This is essentially the same as fd_getfile2, except with a lot more
logic involved, including fiddly details that you have to take care
of.  And...

  I'll commit this in a day or two unless I receive some extremely
  negative feedback.

  @@ -301,14 +301,16 @@ filemon_ioctl(struct file * fp, u_long c
  [...]
  -               filemon->fm_fd = *((int *) data);
  -               if ((filemon->fm_fp = fd_getfile(filemon->fm_fd)) == NULL) {
  +               fd = *((int *) data);
  +               if ((filemon->fm_fp = fd_getfile(fd)) == NULL) {
                          error = EBADF;
                          break;
                  }
  +               filemon->fm_fp->f_count++;
  +               fd_putfile(fd);

...you missed one: you can't touch fp->f_count without holding
fp->f_lock.

So I reiterate my suggestion to use fd_getfile2:

	fd = *((int *)data);
	if ((filemon->fm_fp = fd_getfile2(curproc, fd)) == NULL) {
		error = EBADF;
		break;
	}

Ack - let me test and confirm that it works.



+------------------+--------------------------+------------------------+
| Paul Goyette     | PGP Key fingerprint:     | E-mail addresses:      |
| (Retired)        | FA29 0E3B 35AF E8AE 6651 | paul at whooppee.com   |
| Kernel Developer | 0786 F758 55DE 53BA 7731 | pgoyette at netbsd.org |
+------------------+--------------------------+------------------------+


Home | Main Index | Thread Index | Old Index