• Arnd Bergmann's avatar
    scsi: ipr: Work around fortify-string warning · ee4e7dfe
    Arnd Bergmann authored
    The ipr_log_vpd_compact() function triggers a fortified memcpy() warning
    about a potential string overflow with all versions of clang:
    
    In file included from drivers/scsi/ipr.c:43:
    In file included from include/linux/string.h:254:
    include/linux/fortify-string.h:520:4: error: call to '__write_overflow_field' declared with 'warning' attribute: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror,-Wattribute-warning]
                            __write_overflow_field(p_size_field, size);
                            ^
    include/linux/fortify-string.h:520:4: error: call to '__write_overflow_field' declared with 'warning' attribute: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror,-Wattribute-warning]
    2 errors generated.
    
    I don't see anything actually wrong with the function, but this is the only
    instance I can reproduce of the fortification going wrong in the kernel at
    the moment, so the easiest solution may be to rewrite the function into
    something that does not trigger the warning.
    
    Instead of having a combined buffer for vendor/device/serial strings, use
    three separate local variables and just truncate the whitespace
    individually.
    
    Link: https://lore.kernel.org/r/20230214132831.2118392-1-arnd@kernel.org
    Cc: Kees Cook <keescook@chromium.org>
    Fixes: 8cf093e2 ("[SCSI] ipr: Improved dual adapter errors")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Reviewed-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Acked-by: default avatarBrian King <brking@linux.vnet.ibm.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    ee4e7dfe
ipr.c 302 KB