diff -NurpP linux-2.6.17.11-vs2.1.1-rc31.2/fs/namei.c linux-2.6.17.11-vs2.1.1-rc31.3/fs/namei.c --- linux-2.6.17.11-vs2.1.1-rc31.2/fs/namei.c 2006-08-17 01:24:55 +0200 +++ linux-2.6.17.11-vs2.1.1-rc31.3/fs/namei.c 2006-09-12 15:11:39 +0200 @@ -229,13 +229,20 @@ int generic_permission(struct inode *ino return -EACCES; } -static inline int dx_permission(struct inode *inode, int mask, struct nameidata *nd) +static inline int dx_barrier(struct inode *inode) { if (IS_BARRIER(inode) && !vx_check(0, VX_ADMIN)) { vxwprintk(1, "xid=%d did hit the barrier.", vx_current_xid()); - return -EACCES; + return 1; } + return 0; +} + +static inline int dx_permission(struct inode *inode, int mask, struct nameidata *nd) +{ + if (dx_barrier(inode)) + return -EACCES; if (inode->i_tag == 0) return 0; if (dx_check(inode->i_tag, DX_ADMIN|DX_WATCH|DX_IDENT)) @@ -427,6 +434,8 @@ static int exec_permission_lite(struct i { umode_t mode = inode->i_mode; + if (dx_barrier(inode)) + return -EACCES; if (inode->i_op && inode->i_op->permission) return -EAGAIN;