Fw: [PATCH] namei: add audit_inode to all branches in path_lookup
David Woodhouse
dwmw2 at infradead.org
Wed Mar 23 11:24:15 UTC 2005
On Tue, 2005-03-22 at 19:10 -0800, Andrew Morton wrote:
> There's a patch for you over on linux-mm.
Looks sane; added to the BK tree. Thanks.
> Is there an audit mailing list?
There is. linux-audit at redhat.com
> Begin forwarded message:
>
> Date: Tue, 22 Mar 2005 19:15:02 -0800
> From: pmeda at akamai.com
> To: akpm at osdl.org
> Cc: linux-mm at kvack.org
> Subject: [PATCH] namei: add audit_inode to all branches in path_lookup
>
>
>
> Main change is in path_lookup: added a goto to do audit_inode
> instead of return statement, when emul_lookup_dentry for root
> is successful. The existing code does audit_inode only when
> lookup is done in normal root or cwd.
>
> Other changes: Some lookup routines are returning zero on success,
> and some are returning zero on failure. I documented the related
> function signatures in this code path, so that one can glance over
> abstract functions without understanding the entire code.
>
> Signed-off-by: Prasanna Meda <pmeda at akamai.com>
>
>
> --- linux/fs/namei.c Tue Mar 22 01:29:37 2005
> +++ Linux/fs/namei.c Tue Mar 22 01:48:24 2005
> @@ -675,11 +675,11 @@
>
> /*
> * Name resolution.
> + * This is the basic name resolution function, turning a pathname into
> + * the final dentry. We expect 'base' to be positive and a directory.
> *
> - * This is the basic name resolution function, turning a pathname
> - * into the final dentry.
> - *
> - * We expect 'base' to be positive and a directory.
> + * Returns 0 and nd will have valid dentry and mnt on success.
> + * Returns error and drops reference to input namei data on failure.
> */
> int fastcall link_path_walk(const char * name, struct nameidata *nd)
> {
> @@ -887,8 +887,10 @@
> return link_path_walk(name, nd);
> }
>
> -/* SMP-safe */
> -/* returns 1 if everything is done */
> +/*
> + * SMP-safe: Returns 1 and nd will have valid dentry and mnt, if
> + * everything is done. Returns 0 and drops input nd, if lookup failed;
> + */
> static int __emul_lookup_dentry(const char *name, struct nameidata *nd)
> {
> if (path_walk(name, nd))
> @@ -952,9 +954,10 @@
> }
> }
>
> +/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
> int fastcall path_lookup(const char *name, unsigned int flags, struct nameidata *nd)
> {
> - int retval;
> + int retval = 0;
>
> nd->last_type = LAST_ROOT; /* if there are only slashes... */
> nd->flags = flags;
> @@ -967,7 +970,7 @@
> nd->dentry = dget(current->fs->altroot);
> read_unlock(¤t->fs->lock);
> if (__emul_lookup_dentry(name,nd))
> - return 0;
> + goto out; /* found in altroot */
> read_lock(¤t->fs->lock);
> }
> nd->mnt = mntget(current->fs->rootmnt);
> @@ -979,6 +982,7 @@
> read_unlock(¤t->fs->lock);
> current->total_link_count = 0;
> retval = link_path_walk(name, nd);
> +out:
> if (unlikely(current->audit_context
> && nd && nd->dentry && nd->dentry->d_inode))
> audit_inode(name,
--
dwmw2
More information about the Linux-audit
mailing list