]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
dm ima: fix wrong length calculation for no_data string
authorThore Sommer <public@thson.de>
Tue, 25 Jan 2022 14:05:47 +0000 (15:05 +0100)
committerMike Snitzer <snitzer@redhat.com>
Tue, 22 Feb 2022 15:42:41 +0000 (10:42 -0500)
All entries measured by dm ima are prefixed by a version string
(dm_version=N.N.N). When there is no data to measure, the entire buffer is
overwritten with a string containing the version string again and the
length of that string is added to the length of the version string.
The new length is now wrong because it contains the version string twice.

This caused entries like this:
dm_version=4.45.0;name=test,uuid=test;table_clear=no_data; \
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \
current_device_capacity=204808;

Signed-off-by: Thore Sommer <public@thson.de>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-ima.c

index 957999998d703fc9a631819a27748d973eb7adde..1842d3a958ef9c4586e4f0ce814bd26b8a45117c 100644 (file)
@@ -455,7 +455,7 @@ void dm_ima_measure_on_device_resume(struct mapped_device *md, bool swap)
                scnprintf(device_table_data, DM_IMA_DEVICE_BUF_LEN,
                          "%sname=%s,uuid=%s;device_resume=no_data;",
                          DM_IMA_VERSION_STR, dev_name, dev_uuid);
-               l += strlen(device_table_data);
+               l = strlen(device_table_data);
 
        }
 
@@ -568,7 +568,7 @@ void dm_ima_measure_on_device_remove(struct mapped_device *md, bool remove_all)
                scnprintf(device_table_data, DM_IMA_DEVICE_BUF_LEN,
                          "%sname=%s,uuid=%s;device_remove=no_data;",
                          DM_IMA_VERSION_STR, dev_name, dev_uuid);
-               l += strlen(device_table_data);
+               l = strlen(device_table_data);
        }
 
        memcpy(device_table_data + l, remove_all_str, remove_all_len);
@@ -654,7 +654,7 @@ void dm_ima_measure_on_table_clear(struct mapped_device *md, bool new_map)
                scnprintf(device_table_data, DM_IMA_DEVICE_BUF_LEN,
                          "%sname=%s,uuid=%s;table_clear=no_data;",
                           DM_IMA_VERSION_STR, dev_name, dev_uuid);
-               l += strlen(device_table_data);
+               l = strlen(device_table_data);
        }
 
        capacity_len = strlen(capacity_str);