return -EACCES;
}
-static inline int xid_permission(struct inode *inode, int mask, struct nameidata *nd)
+static inline int vx_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 xid_permission(struct inode *inode, int mask, struct nameidata *nd)
+{
+ if (vx_barrier(inode))
+ return -EACCES;
if (inode->i_xid == 0)
return 0;
if (vx_check(inode->i_xid, VX_ADMIN|VX_WATCH|VX_IDENT))
{
umode_t mode = inode->i_mode;
+ if (vx_barrier(inode))
+ return -EACCES;
if (inode->i_op && inode->i_op->permission)
return -EAGAIN;
return __vfs_follow_link(nd, link);
}
-
/* get the link contents into pagecache */
static char *page_getlink(struct dentry * dentry, struct page **ppage)
{