• Luck, Tony's avatar
    efi: Handle memory error structures produced based on old versions of standard · 4c62360d
    Luck, Tony authored
    The memory error record structure includes as its first field a
    bitmask of which subsequent fields are valid. The allows new fields
    to be added to the structure while keeping compatibility with older
    software that parses these records. This mechanism was used between
    versions 2.2 and 2.3 to add four new fields, growing the size of the
    structure from 73 bytes to 80. But Linux just added all the new
    fields so this test:
    	if (gdata->error_data_length >= sizeof(*mem_err))
    		cper_print_mem(newpfx, mem_err);
    	else
    		goto err_section_too_small;
    now make Linux complain about old format records being too short.
    
    Add a definition for the old format of the structure and use that
    for the minimum size check. Pass the actual size to cper_print_mem()
    so it can sanity check the validation_bits field to ensure that if
    a BIOS using the old format sets bits as if it were new, we won't
    access fields beyond the end of the structure.
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
    4c62360d
cper.c 15.7 KB