From: Erez Zadok <ezk@xxxxxxxxxxxxx> Bug fix to test if a lower branch is readonly, even when given negative dentries. Signed-off-by: Erez Zadok <ezk@xxxxxxxxxxxxx> Signed-off-by: Josef 'Jeff' Sipek <jsipek@xxxxxxxxxxxxx> --- fs/unionfs/union.h | 19 ++++++++++++++----- 1 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fs/unionfs/union.h b/fs/unionfs/union.h index 33c2137..26d886e 100644 --- a/fs/unionfs/union.h +++ b/fs/unionfs/union.h @@ -396,14 +396,23 @@ static inline int is_robranch_super(const struct super_block *sb, int index) /* Is this file on a read-only branch? */ static inline int is_robranch_idx(const struct dentry *dentry, int index) { - int err = 0; + struct super_block *lower_sb; BUG_ON(index < 0); - if ((!(branchperms(dentry->d_sb, index) & MAY_WRITE)) || - IS_RDONLY(unionfs_lower_dentry_idx(dentry, index)->d_inode)) - err = -EROFS; - return err; + if (!(branchperms(dentry->d_sb, index) & MAY_WRITE)) + return -EROFS; + + lower_sb = unionfs_lower_super_idx(dentry->d_sb, index); + BUG_ON(lower_sb == NULL); + /* + * test sb flags directly, not IS_RDONLY(lower_inode) because the + * lower_dentry could be a negative. + */ + if (lower_sb->s_flags & MS_RDONLY) + return -EROFS; + + return 0; } static inline int is_robranch(const struct dentry *dentry) -- 1.5.2.2.238.g7cbf2f2 - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html