[lvc-project] [PATCH 1/1] dm-vdo: Refactor VDO_ASSERT usage in start_restoring_volume functions

Matthew Sakai msakai at redhat.com
Tue Sep 9 22:23:06 MSK 2025



On 9/9/25 2:58 PM, Matthew Sakai wrote:
> On 9/8/25 6:24 PM, Ivan Abramov wrote:
>> There's an incorrect VDO_ASSERT macro usage in
>> start_restoring volume_index() and start_restoring_volume_sub_index(),
>> since assert's return value is not used anywhere.
>>
>> Thus, use VDO_ASSERT_LOG_ONLY macro in such cases.
>>
>> Found by Linux Verification Center (linuxtesting.org) with SVACE.
>>
>> Signed-off-by: Ivan Abramov <i.abramov at mt-integration.ru>
>> ---
>>   drivers/md/dm-vdo/indexer/volume-index.c | 8 ++------
>>   1 file changed, 2 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/md/dm-vdo/indexer/volume-index.c b/drivers/md/dm- 
>> vdo/indexer/volume-index.c
>> index 12f954a0c532..99608f14400a 100644
>> --- a/drivers/md/dm-vdo/indexer/volume-index.c
>> +++ b/drivers/md/dm-vdo/indexer/volume-index.c
>> @@ -832,11 +832,9 @@ static int 
>> start_restoring_volume_sub_index(struct volume_sub_index *sub_index,
>>           decode_u32_le(buffer, &offset, &header.first_list);
>>           decode_u32_le(buffer, &offset, &header.list_count);
>> -        result = VDO_ASSERT(offset == sizeof(buffer),
>> +        VDO_ASSERT_LOG_ONLY(offset == sizeof(buffer),
>>                       "%zu bytes decoded of %zu expected", offset,
>>                       sizeof(buffer));
>> -        if (result != VDO_SUCCESS)
>> -            result = UDS_CORRUPT_DATA;
> 
> This is not a correct fix so we should not take this.
> 
> This assertion (and the one below) should only fail if the stored 
> metadata has been corrupted, but in that case we definitely need to 
> return the error and fail the load.
> 
> You are correct that we don't seem to use this result, but the correct 
> fix is to return UDS_CORRUPT_DATA when this assertion fails.

Replying to myself, feel free to correct this patch, or I can probably 
get to posting a proper fix later in the week.

> Matt
> 
> 
>>           if (memcmp(header.magic, MAGIC_START_5, MAGIC_SIZE) != 0) {
>>               return vdo_log_warning_strerror(UDS_CORRUPT_DATA,
>> @@ -924,11 +922,9 @@ static int start_restoring_volume_index(struct 
>> volume_index *volume_index,
>>           offset += MAGIC_SIZE;
>>           decode_u32_le(buffer, &offset, &header.sparse_sample_rate);
>> -        result = VDO_ASSERT(offset == sizeof(buffer),
>> +        VDO_ASSERT_LOG_ONLY(offset == sizeof(buffer),
>>                       "%zu bytes decoded of %zu expected", offset,
>>                       sizeof(buffer));
>> -        if (result != VDO_SUCCESS)
>> -            result = UDS_CORRUPT_DATA;
>>           if (memcmp(header.magic, MAGIC_START_6, MAGIC_SIZE) != 0)
>>               return vdo_log_warning_strerror(UDS_CORRUPT_DATA,
> 




More information about the lvc-project mailing list