From: Benjamin Marzinski Date: Wed, 29 Apr 2026 20:21:06 +0000 (-0400) Subject: dm-ima: Handle race between rename and table swap X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=4c14480c37f757acfeff8be1c7be0ab8384d79be;p=thirdparty%2Fkernel%2Flinux.git dm-ima: Handle race between rename and table swap a device rename could happen after do_resume() removed the inactive table that it was swapping to out of the hash cell, but before it was made the active table. In this case, the table metadata would still have the old name. Update the swapped table's metadata to avoid this. Signed-off-by: Benjamin Marzinski Signed-off-by: Mikulas Patocka --- diff --git a/drivers/md/dm-ima.c b/drivers/md/dm-ima.c index f563c4381489f..47af99c9b79c6 100644 --- a/drivers/md/dm-ima.c +++ b/drivers/md/dm-ima.c @@ -373,6 +373,19 @@ void dm_ima_measure_on_device_resume(struct mapped_device *md, bool swap, kfree(md->ima.active_table.device_metadata); md->ima.active_table = context->table; memset(&context->table, 0, sizeof(context->table)); + if (md->ima.active_table.device_metadata) { + /* + * A rename could have happened while the swap was + * going on. In that case, the saved table info would + * still have the old name. Update the metadata to be + * sure that it has the current name + */ + struct dm_ima_device_table_metadata *table = &md->ima.active_table; + fix_context_strings(context); + dm_ima_copy_device_data(md, table->device_metadata, + context, table->num_targets); + table->device_metadata_len = strlen(table->device_metadata); + } } if (md->ima.active_table.device_metadata) {