Set the LOOKUP_CONTINUE flag when checking parent permissions. This allows
permission functions to tell between parent and leaf checks.
Signed-off-by: Andreas Gruenbacher <[email protected]>
Signed-off-by: John Johansen <[email protected]>
---
fs/namei.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1472,6 +1472,10 @@ static int may_delete(struct inode *dir,
BUG_ON(victim->d_parent->d_inode != dir);
audit_inode_child(victim->d_name.name, victim, dir);
+#if 0
+ if (nd)
+ nd->flags |= LOOKUP_CONTINUE;
+#endif
error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);
if (error)
return error;
@@ -1509,6 +1513,8 @@ static inline int may_create(struct inod
return -EEXIST;
if (IS_DEADDIR(dir))
return -ENOENT;
+ if (nd)
+ nd->flags |= LOOKUP_CONTINUE;
return permission(dir,MAY_WRITE | MAY_EXEC, nd);
}
--
On Thu, 2007-10-25 at 23:40 -0700, [email protected] wrote:
> plain text document attachment (parent-permission.diff)
> Set the LOOKUP_CONTINUE flag when checking parent permissions. This allows
> permission functions to tell between parent and leaf checks.
>
> Signed-off-by: Andreas Gruenbacher <[email protected]>
> Signed-off-by: John Johansen <[email protected]>
>
> ---
> fs/namei.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -1472,6 +1472,10 @@ static int may_delete(struct inode *dir,
> BUG_ON(victim->d_parent->d_inode != dir);
> audit_inode_child(victim->d_name.name, victim, dir);
>
> +#if 0
> + if (nd)
> + nd->flags |= LOOKUP_CONTINUE;
> +#endif
#if 0?
> error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);
> if (error)
> return error;
> @@ -1509,6 +1513,8 @@ static inline int may_create(struct inod
> return -EEXIST;
> if (IS_DEADDIR(dir))
> return -ENOENT;
> + if (nd)
> + nd->flags |= LOOKUP_CONTINUE;
> return permission(dir,MAY_WRITE | MAY_EXEC, nd);
> }
>
>
--
Stephen Smalley
National Security Agency
On Fri, Oct 26, 2007 at 08:32:23AM -0400, Stephen Smalley wrote:
> On Thu, 2007-10-25 at 23:40 -0700, [email protected] wrote:
> > plain text document attachment (parent-permission.diff)
> > Set the LOOKUP_CONTINUE flag when checking parent permissions. This allows
> > permission functions to tell between parent and leaf checks.
> >
> > Signed-off-by: Andreas Gruenbacher <[email protected]>
> > Signed-off-by: John Johansen <[email protected]>
> >
> > ---
> > fs/namei.c | 6 ++++++
> > 1 file changed, 6 insertions(+)
> >
> > --- a/fs/namei.c
> > +++ b/fs/namei.c
> > @@ -1472,6 +1472,10 @@ static int may_delete(struct inode *dir,
> > BUG_ON(victim->d_parent->d_inode != dir);
> > audit_inode_child(victim->d_name.name, victim, dir);
> >
> > +#if 0
> > + if (nd)
> > + nd->flags |= LOOKUP_CONTINUE;
> > +#endif
>
> #if 0?
>
Oops, thanks I missed that one.
regards
john