Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Oct 2002 18:09:31 -0700 (PDT)
From:      Nate Lawson <nate@root.org>
To:        Maxim Sobolev <sobomax@FreeBSD.org>
Cc:        jlemon@FreeBSD.org, hackers@FreeBSD.org, audit@FreeBSD.org
Subject:   Re: New kevent types: NOTE_STARTEXEC and NOTE_STOPEXEC
Message-ID:  <Pine.BSF.4.21.0210261715520.78755-100000@root.org>
In-Reply-To: <3DB79DFA.FA719B8F@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 24 Oct 2002, Maxim Sobolev wrote:
> Please review the patch, which adds two new types of events -
> NOTE_STARTEXEC and NOTE_STOPEXEC, that could be used to get
> notification when the image starts or stops executing. For example, it
> could be used to monitor that a daemon is up and running and notify
> administrator when for some reason in exits. I am running this code
> for more than a year now without any problems.
> 
> Any comments and suggestions are welcome.

Couldn't this just be done by init(8) and /etc/ttys?  Or inetd?  If you
want to write your own, couldn't you use waitpid()?  Or a kevent() of
EVFILT_PROC with NOTE_EXIT/NOTE_FORK?  I'm not sure I see the need for
this.

Comments below.

> +.It NOTE_STOPEXEC
> +Execution of the file referenced by the descriptor ended.  Triggered
> when
> +the process associated with the file exited or was replaced with anoter
> +image using
> +.Xr execve 2
> +or simial syscall.  The PID of the process is returned in
      ^^^^^
typo

> Index: src/sys/sys/event.h
> ===================================================================
> RCS file: /home/ncvs/src/sys/sys/event.h,v
> retrieving revision 1.21
> diff -d -u -r1.21 event.h
> --- src/sys/sys/event.h	29 Jun 2002 19:14:52 -0000	1.21
> +++ src/sys/sys/event.h	24 Oct 2002 06:57:41 -0000
> @@ -83,13 +83,15 @@
>  /*
>   * data/hint flags for EVFILT_VNODE, shared with userspace
>   */
> -#define	NOTE_DELETE	0x0001			/* vnode was removed */
> -#define	NOTE_WRITE	0x0002			/* data contents changed */
> -#define	NOTE_EXTEND	0x0004			/* size increased */
> -#define	NOTE_ATTRIB	0x0008			/* attributes changed */
> -#define	NOTE_LINK	0x0010			/* link count changed */
> -#define	NOTE_RENAME	0x0020			/* vnode was renamed */
> -#define	NOTE_REVOKE	0x0040			/* vnode access was revoked */
> +#define	NOTE_DELETE	0x00100000		/* vnode was removed */
> +#define	NOTE_WRITE	0x00200000		/* data contents changed */
> +#define	NOTE_EXTEND	0x00400000		/* size increased */
> +#define	NOTE_ATTRIB	0x00800000		/* attributes changed */
> +#define	NOTE_LINK	0x01000000		/* link count changed */
> +#define	NOTE_RENAME	0x02000000		/* vnode was renamed */
> +#define	NOTE_REVOKE	0x04000000		/* vnode access was revoked */
> +#define	NOTE_STARTEXEC	0x08000000		/* vnode was executed */
> +#define	NOTE_STOPEXEC	0x10000000		/* vnode execution stopped */
> +/* Applies both to EVFILT_VNODE and EVFILT_PROC */
>  #define	NOTE_PDATAMASK	0x000fffff		/* mask for pid */

I don't think we should burn our 32 bits on this.  Since pids are 32 bits,
this interface will fail unpredictably.

>  /* additional flags for EVFILT_PROC */
> Index: src/sys/kern/kern_exec.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/kern/kern_exec.c,v
> retrieving revision 1.193
> diff -d -u -r1.193 kern_exec.c
> --- src/sys/kern/kern_exec.c	11 Oct 2002 21:04:01 -0000	1.193
> +++ src/sys/kern/kern_exec.c	24 Oct 2002 06:57:41 -0000
> @@ -518,6 +518,8 @@
>  	 * to locking the proc lock.
>  	 */
>  	textvp = p->p_textvp;
> +	if (textvp)
> +		VN_KNOTE(textvp, NOTE_STOPEXEC | p->p_pid);
>  	p->p_textvp = ndp->ni_vp;

Do these always stay an int or are there casts that could result in endian
problems?

>Index: src/sys/kern/kern_fork.c
>===================================================================
>RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v
>retrieving revision 1.172
>diff -d -u -r1.172 kern_fork.c
>--- src/sys/kern/kern_fork.c	18 Oct 2002 17:45:41 -0000	1.172
>+++ src/sys/kern/kern_fork.c	24 Oct 2002 06:58:03 -0000
>@@ -724,6 +724,8 @@
> 	 * tell any interested parties about the new process
> 	 */
> 	KNOTE(&p1->p_klist, NOTE_FORK | p2->p_pid);
>+	if (p2->p_textvp != NULL)
>+		VN_KNOTE(p2->p_textvp, NOTE_STARTEXEC | p2->p_pid);
> 	PROC_UNLOCK(p1);
> 
> 	/*

This shows my doubt for the need for this since the NOTE_FORK is immediately
before your duplicate NOTE_STARTEXEC.

-Nate


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0210261715520.78755-100000>