Eric Biggers
ea1299be02
fscrypt: don't evict dirty inodes after removing key
...
commit 2b4eae95c7 upstream.
After FS_IOC_REMOVE_ENCRYPTION_KEY removes a key, it syncs the
filesystem and tries to get and put all inodes that were unlocked by the
key so that unused inodes get evicted via fscrypt_drop_inode().
Normally, the inodes are all clean due to the sync.
However, after the filesystem is sync'ed, userspace can modify and close
one of the files. (Userspace is *supposed* to close the files before
removing the key. But it doesn't always happen, and the kernel can't
assume it.) This causes the inode to be dirtied and have i_count == 0.
Then, fscrypt_drop_inode() failed to consider this case and indicated
that the inode can be dropped, causing the write to be lost.
On f2fs, other problems such as a filesystem freeze could occur due to
the inode being freed while still on f2fs's dirty inode list.
Fix this bug by making fscrypt_drop_inode() only drop clean inodes.
I've written an xfstest which detects this bug on ext4, f2fs, and ubifs.
Fixes: b1c0ec3599 ("fscrypt: add FS_IOC_REMOVE_ENCRYPTION_KEY ioctl")
Cc: <stable@vger.kernel.org > # v5.4+
Link: https://lore.kernel.org/r/20200305084138.653498-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-18 07:17:53 +01:00
..
2019-09-27 15:10:34 -07:00
2019-07-19 11:33:22 -07:00
2020-01-17 19:48:50 +01:00
2020-01-29 16:45:24 +01:00
2019-10-25 00:03:11 -04:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2020-03-12 13:00:20 +01:00
2019-05-24 17:27:11 +02:00
2020-03-05 16:43:38 +01:00
2020-03-18 07:17:51 +01:00
2019-09-19 09:42:37 -07:00
2020-02-11 04:35:12 -08:00
2019-11-23 21:44:49 -05:00
2020-03-18 07:17:53 +01:00
2020-02-01 09:34:35 +00:00
2019-09-03 09:30:56 -04:00
2019-07-12 17:37:53 -07:00
2020-02-28 17:22:26 +01:00
2019-07-19 10:42:02 -07:00
2019-08-30 07:27:17 -07:00
2020-02-11 04:35:23 -08:00
2019-11-10 11:56:05 -05:00
2020-02-11 04:35:45 -08:00
2020-03-05 16:43:41 +01:00
2020-03-05 16:43:48 +01:00
2020-03-12 13:00:19 +01:00
2019-08-30 07:27:17 -07:00
2019-07-10 18:43:43 -07:00
2020-03-18 07:17:52 +01:00
2020-03-18 07:17:51 +01:00
2019-05-21 10:50:46 +02:00
2019-07-16 19:23:23 -07:00
2019-05-12 17:52:13 -04:00
2019-08-30 08:11:25 -07:00
2020-01-04 19:19:19 +01:00
2020-01-04 19:17:31 +01:00
2019-09-19 09:42:37 -07:00
2020-02-28 17:22:18 +01:00
2019-12-04 22:31:06 +01:00
2019-09-19 09:42:37 -07:00
2019-12-13 08:42:53 +01:00
2019-07-03 17:52:09 -04:00
2019-08-30 07:27:17 -07:00
2020-03-05 16:43:37 +01:00
2019-05-21 10:50:46 +02:00
2020-02-24 08:36:38 +01:00
2019-07-01 08:25:34 -07:00
2019-05-21 10:50:46 +02:00
2020-01-12 12:21:38 +01:00
2020-02-11 04:35:12 -08:00
2020-02-24 08:37:00 +01:00
2019-08-30 08:11:25 -07:00
2019-07-19 10:42:02 -07:00
2020-02-24 08:37:02 +01:00
2020-02-11 04:35:24 -08:00
2019-10-19 06:32:32 -04:00
2020-01-14 20:08:28 +01:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2020-01-12 12:21:37 +01:00
2019-09-12 21:05:34 -04:00
2020-02-24 08:37:00 +01:00
2019-09-19 10:06:57 -07:00
2019-09-19 10:06:57 -07:00
2019-07-19 10:42:02 -07:00
2019-08-30 07:27:18 -07:00
2019-10-12 20:49:07 -04:00
2020-03-05 16:43:50 +01:00
2020-02-24 08:36:44 +01:00
2019-09-19 09:42:37 -07:00
2019-09-17 11:48:24 -04:00
2019-08-12 19:33:50 -07:00
2020-03-05 16:43:51 +01:00
2020-02-11 04:35:37 -08:00
2019-07-19 10:42:02 -07:00
2020-02-11 04:35:12 -08:00
2019-05-21 10:50:45 +02:00
2019-05-30 11:26:32 -07:00
2019-10-06 13:53:27 -07:00
2019-05-21 10:50:45 +02:00
2019-07-16 19:23:22 -07:00
2019-07-19 10:42:02 -07:00
2019-05-21 10:50:45 +02:00
2019-12-13 08:43:19 +01:00
2020-01-17 19:48:21 +01:00
2020-01-14 20:08:18 +01:00
2019-05-30 11:29:21 -07:00
2020-01-09 10:20:05 +01:00
2019-06-19 17:09:55 +02:00
2019-08-03 07:02:01 -07:00
2019-08-30 19:31:09 -04:00
2020-03-05 16:43:36 +01:00
2019-07-20 09:15:51 -07:00
2019-05-21 10:50:45 +02:00
2019-10-14 15:04:01 -07:00
2020-01-12 12:21:37 +01:00
2020-02-11 04:35:37 -08:00
2019-08-21 00:20:40 +02:00
2019-11-29 10:10:10 +01:00
2019-08-07 21:51:47 -04:00
2019-08-19 11:00:39 -04:00
2019-09-06 21:28:49 +02:00
2019-09-12 21:06:14 -04:00
2019-07-16 22:52:37 -04:00
2019-05-21 10:50:45 +02:00
2020-02-11 04:35:11 -08:00
2019-07-19 10:42:02 -07:00
2020-01-12 12:21:37 +01:00
2020-01-17 19:48:21 +01:00
2020-03-05 16:43:44 +01:00
2019-12-17 19:55:30 +01:00
2019-09-18 16:59:14 -07:00
2019-06-24 09:16:47 +10:00
2019-10-14 15:04:01 -07:00
2020-01-09 10:19:57 +01:00
2019-09-18 16:59:14 -07:00
2019-05-21 10:50:45 +02:00
2019-07-16 22:52:37 -04:00
2020-01-17 19:48:21 +01:00
2020-03-05 16:43:48 +01:00
2019-10-16 23:15:09 -04:00
2019-05-30 11:26:32 -07:00
2019-05-25 18:00:06 -04:00
2020-03-18 07:17:51 +01:00
2019-05-25 18:00:07 -04:00
2019-06-17 17:36:09 -04:00
2019-05-30 11:29:53 -07:00
2019-05-21 10:50:45 +02:00
2019-09-06 21:28:49 +02:00
2020-02-11 04:35:23 -08:00
2020-01-29 16:45:31 +01:00
2019-07-16 19:23:25 -07:00
2019-08-13 16:06:52 -07:00
2019-12-17 19:56:52 +01:00
2019-05-21 10:50:45 +02:00
2019-10-03 14:21:35 -07:00
2020-01-12 12:21:38 +01:00
2019-05-14 09:47:50 -07:00
2019-08-01 20:51:23 +02:00
2020-01-04 19:18:32 +01:00
2020-02-11 04:35:12 -08:00
2019-05-21 10:50:45 +02:00