From: Eric Biggers Date: Thu, 26 Dec 2019 15:41:05 +0000 (-0600) Subject: ext4: handle decryption error in __ext4_block_zero_page_range() X-Git-Tag: v5.15~4599^2~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=834f1565fa3f9c8f78adbfcaa80ae510fe4971c3;p=platform%2Fkernel%2Flinux-starfive.git ext4: handle decryption error in __ext4_block_zero_page_range() fscrypt_decrypt_pagecache_blocks() can fail, because it uses skcipher_request_alloc(), which uses kmalloc(), which can fail; and also because it calls crypto_skcipher_decrypt(), which can fail depending on the driver that actually implements the crypto. Therefore it's not appropriate to WARN on decryption error in __ext4_block_zero_page_range(). Remove the WARN and just handle the error instead. Signed-off-by: Eric Biggers Link: https://lore.kernel.org/r/20191226154105.4704-1-ebiggers@kernel.org Signed-off-by: Theodore Ts'o --- diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 9100460..d3e1539 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3725,8 +3725,12 @@ static int __ext4_block_zero_page_range(handle_t *handle, if (S_ISREG(inode->i_mode) && IS_ENCRYPTED(inode)) { /* We expect the key to be set. */ BUG_ON(!fscrypt_has_encryption_key(inode)); - WARN_ON_ONCE(fscrypt_decrypt_pagecache_blocks( - page, blocksize, bh_offset(bh))); + err = fscrypt_decrypt_pagecache_blocks(page, blocksize, + bh_offset(bh)); + if (err) { + clear_buffer_uptodate(bh); + goto unlock; + } } } if (ext4_should_journal_data(inode)) {