diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2025-03-28 16:17:45 +0100 |
---|---|---|
committer | Mikulas Patocka <mpatocka@redhat.com> | 2025-03-28 18:26:11 +0100 |
commit | 2de510fccbca3d1906b55f4be5f1de83fa2424ef (patch) | |
tree | eb3664374e2f4cfe25cedf87a2ac33c5fe359a5d | |
parent | 8bde1033f9cfc1c08628255cc434c6cf39c9d9ba (diff) |
dm-verity: fix prefetch-vs-suspend race
There's a possible race condition in dm-verity - the prefetch work item
may race with suspend and it is possible that prefetch continues to run
while the device is suspended. Fix this by calling flush_workqueue and
dm_bufio_client_reset in the postsuspend hook.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
-rw-r--r-- | drivers/md/dm-verity-target.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c index 40448a8c74b1..3c427f18a04b 100644 --- a/drivers/md/dm-verity-target.c +++ b/drivers/md/dm-verity-target.c @@ -836,6 +836,13 @@ static int verity_map(struct dm_target *ti, struct bio *bio) return DM_MAPIO_SUBMITTED; } +static void verity_postsuspend(struct dm_target *ti) +{ + struct dm_verity *v = ti->private; + flush_workqueue(v->verify_wq); + dm_bufio_client_reset(v->bufio); +} + /* * Status: V (valid) or C (corruption found) */ @@ -1806,6 +1813,7 @@ static struct target_type verity_target = { .ctr = verity_ctr, .dtr = verity_dtr, .map = verity_map, + .postsuspend = verity_postsuspend, .status = verity_status, .prepare_ioctl = verity_prepare_ioctl, .iterate_devices = verity_iterate_devices, |