Commit 60a46c69 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] reiserfs: Fix handling of some extended inode

From: Oleg Drokin <green@namesys.com>

This patch fixes a problem in reiserfs' handling of immutable attribute,
where every user (not just root) can unset it.  Also it adds "append-only"
attribute "support" (all the support is in VFS anyway, we only recognise the
bit now).  Also misleading comment in reiserfs_fs.h is removed.
parent a996a1cc
...@@ -2236,6 +2236,10 @@ void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode ) ...@@ -2236,6 +2236,10 @@ void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode )
inode -> i_flags |= S_IMMUTABLE; inode -> i_flags |= S_IMMUTABLE;
else else
inode -> i_flags &= ~S_IMMUTABLE; inode -> i_flags &= ~S_IMMUTABLE;
if( sd_attrs & REISERFS_APPEND_FL )
inode -> i_flags |= S_APPEND;
else
inode -> i_flags &= ~S_APPEND;
if( sd_attrs & REISERFS_NOATIME_FL ) if( sd_attrs & REISERFS_NOATIME_FL )
inode -> i_flags |= S_NOATIME; inode -> i_flags |= S_NOATIME;
else else
......
...@@ -47,7 +47,7 @@ int reiserfs_ioctl (struct inode * inode, struct file * filp, unsigned int cmd, ...@@ -47,7 +47,7 @@ int reiserfs_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
if (get_user(flags, (int *) arg)) if (get_user(flags, (int *) arg))
return -EFAULT; return -EFAULT;
if ( ( flags & REISERFS_IMMUTABLE_FL ) && if ( ( ( flags ^ REISERFS_I(inode) -> i_attrs) & ( REISERFS_IMMUTABLE_FL | REISERFS_APPEND_FL)) &&
!capable( CAP_LINUX_IMMUTABLE ) ) !capable( CAP_LINUX_IMMUTABLE ) )
return -EPERM; return -EPERM;
......
...@@ -879,19 +879,14 @@ struct stat_data_v1 ...@@ -879,19 +879,14 @@ struct stat_data_v1
/* we want common flags to have the same values as in ext2, /* we want common flags to have the same values as in ext2,
so chattr(1) will work without problems */ so chattr(1) will work without problems */
#define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL #define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL
#define REISERFS_APPEND_FL EXT2_APPEND_FL
#define REISERFS_SYNC_FL EXT2_SYNC_FL #define REISERFS_SYNC_FL EXT2_SYNC_FL
#define REISERFS_NOATIME_FL EXT2_NOATIME_FL #define REISERFS_NOATIME_FL EXT2_NOATIME_FL
#define REISERFS_NODUMP_FL EXT2_NODUMP_FL #define REISERFS_NODUMP_FL EXT2_NODUMP_FL
#define REISERFS_SECRM_FL EXT2_SECRM_FL #define REISERFS_SECRM_FL EXT2_SECRM_FL
#define REISERFS_UNRM_FL EXT2_UNRM_FL #define REISERFS_UNRM_FL EXT2_UNRM_FL
#define REISERFS_COMPR_FL EXT2_COMPR_FL #define REISERFS_COMPR_FL EXT2_COMPR_FL
/* persistent flag to disable tails on per-file basic. #define REISERFS_NOTAIL_FL EXT2_NOTAIL_FL
Note, that is inheritable: mark directory with this and
all new files inside will not have tails.
Teodore Tso allocated EXT2_NODUMP_FL (0x00008000) for this. Change
numeric constant to ext2 macro when available. */
#define REISERFS_NOTAIL_FL (0x00008000) /* EXT2_NOTAIL_FL */
/* persistent flags that file inherits from the parent directory */ /* persistent flags that file inherits from the parent directory */
#define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment