ext4: fix EXT4_IOC_SWAP_BOOT
authorTheodore Ts'o <tytso@mit.edu>
Tue, 2 Oct 2018 22:21:19 +0000 (18:21 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 2 Oct 2018 22:21:19 +0000 (18:21 -0400)
commit18aded17492088962ef43f00825179598b3e8c58
tree7581a1e8fb96cd3c32a66eeb04ec6e86554d8545
parent799578ab16e86b074c184ec5abbda0bc698c7b0b
ext4: fix EXT4_IOC_SWAP_BOOT

The code EXT4_IOC_SWAP_BOOT ioctl hasn't been updated in a while, and
it's a bit broken with respect to more modern ext4 kernels, especially
metadata checksums.

Other problems fixed with this commit:

* Don't allow installing a DAX, swap file, or an encrypted file as a
  boot loader.

* Respect the immutable and append-only flags.

* Wait until any DIO operations are finished *before* calling
  truncate_inode_pages().

* Don't swap inode->i_flags, since these flags have nothing to do with
  the inode blocks --- and it will give the IMA/audit code heartburn
  when the inode is evicted.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@kernel.org
Reported-by: syzbot+e81ccd4744c6c4f71354@syzkaller.appspotmail.com
fs/ext4/ioctl.c