Commit 2de510fc authored by Mikulas Patocka's avatar Mikulas Patocka
Browse files

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: default avatarMikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
parent 8bde1033
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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,