ext4: only use fscrypt_zeroout_range() on regular files
authorEric Biggers <ebiggers@google.com>
Thu, 26 Dec 2019 16:10:22 +0000 (10:10 -0600)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 17 Jan 2020 21:24:53 +0000 (16:24 -0500)
fscrypt_zeroout_range() is only for encrypted regular files, not for
encrypted directories or symlinks.

Fortunately, currently it seems it's never called on non-regular files.
But to be safe ext4 should explicitly check S_ISREG() before calling it.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Link: https://lore.kernel.org/r/20191226161022.53490-1-ebiggers@kernel.org
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inode.c

index d3e1539..73482fc 100644 (file)
@@ -403,7 +403,7 @@ int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk,
 {
        int ret;
 
-       if (IS_ENCRYPTED(inode))
+       if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
                return fscrypt_zeroout_range(inode, lblk, pblk, len);
 
        ret = sb_issue_zeroout(inode->i_sb, pblk, len, GFP_NOFS);