ext4: be more strict when verifying flags set via SETFLAGS ioctls
authorJan Kara <jack@suse.cz>
Tue, 29 Nov 2016 16:18:39 +0000 (11:18 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 29 Nov 2016 16:18:39 +0000 (11:18 -0500)
commitd14e7683ecf06aa4365ee96adf74494114341dbe
treea07c504cd6b88e7514d84b50b734154f7815f35c
parentf8011d93a2d125b812e8b90bedb5be2a00149ac4
ext4: be more strict when verifying flags set via SETFLAGS ioctls

Currently we just silently ignore flags that we don't understand (or
that cannot be manipulated) through EXT4_IOC_SETFLAGS and
EXT4_IOC_FSSETXATTR ioctls. This makes it problematic for the unused
flags to be used in future (some app may be inadvertedly setting them
and we won't notice until the flag gets used). Also this is inconsistent
with other filesystems like XFS or BTRFS which return EOPNOTSUPP when
they see a flag they cannot set.

ext4 has the additional problem that there are flags which are returned
by EXT4_IOC_GETFLAGS ioctl but which cannot be modified via
EXT4_IOC_SETFLAGS. So we have to be careful to ignore value of these
flags and not fail the ioctl when they are set (as e.g. chattr(1) passes
flags returned from EXT4_IOC_GETFLAGS to EXT4_IOC_SETFLAGS without any
masking and thus we'd break this utility).

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/ext4.h
fs/ext4/ioctl.c