]> git.hungrycats.org Git - linux/commit
btrfs: add missing check for nocow and compression inode flags
authorDavid Sterba <dsterba@suse.com>
Fri, 10 Jul 2020 07:49:56 +0000 (09:49 +0200)
committerZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Tue, 1 Sep 2020 04:44:14 +0000 (00:44 -0400)
commit28e71f0d0c8d7178cf9431f3820151cc02682448
tree058b8225fc3b3294dd8a365550902e34a2fc0fec
parent42ace34a7782c910a9a156eb3c62196134ee22c0
btrfs: add missing check for nocow and compression inode flags

commit f37c563bab4297024c300b05c8f48430e323809d upstream.

User Forza reported on IRC that some invalid combinations of file
attributes are accepted by chattr.

The NODATACOW and compression file flags/attributes are mutually
exclusive, but they could be set by 'chattr +c +C' on an empty file. The
nodatacow will be in effect because it's checked first in
btrfs_run_delalloc_range.

Extend the flag validation to catch the following cases:

  - input flags are conflicting
  - old and new flags are conflicting
  - initialize the local variable with inode flags after inode ls locked

Inode attributes take precedence over mount options and are an
independent setting.

Nocompress would be a no-op with nodatacow, but we don't want to mix
any compression-related options with nodatacow.

CC: stable@vger.kernel.org # 4.4+
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 2f29a31f394ef9cffebbcafcd03db0c8c07f2cd3)
fs/btrfs/ioctl.c