summaryrefslogtreecommitdiffstats
path: root/fs/ext4/inode.c
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@kernel.org>2018-05-13 22:45:56 +0200
committerTheodore Ts'o <tytso@mit.edu>2018-05-13 22:45:56 +0200
commit6390d33bf5d9b24fd4f96e415b6888f59c8494f9 (patch)
tree41abc900ed27d46cb27466a562babf2a443af09e /fs/ext4/inode.c
parentfs: ext4: add new return type vm_fault_t (diff)
downloadlinux-6390d33bf5d9b24fd4f96e415b6888f59c8494f9.tar.xz
linux-6390d33bf5d9b24fd4f96e415b6888f59c8494f9.zip
ext4: add verifier check for symlink with append/immutable flags
The Linux VFS does not allow a way to set append/immuttable attributes to symlinks, this is just not possible. If this is detected inform the user as the filesystem must be corrupted. Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext4/inode.c')
-rw-r--r--fs/ext4/inode.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 0eb64e8f9602..9d512fa80d28 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4965,6 +4965,13 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
inode->i_op = &ext4_dir_inode_operations;
inode->i_fop = &ext4_dir_operations;
} else if (S_ISLNK(inode->i_mode)) {
+ /* VFS does not allow setting these so must be corruption */
+ if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) {
+ EXT4_ERROR_INODE(inode,
+ "immutable or append flags not allowed on symlinks");
+ ret = -EFSCORRUPTED;
+ goto bad_inode;
+ }
if (ext4_encrypted_inode(inode)) {
inode->i_op = &ext4_encrypted_symlink_inode_operations;
ext4_set_aops(inode);