EFI: address a violation of MISRA C Rule 13.6

guest_handle_ok()'s expansion contains a sizeof() involving its
first argument which is guest_handle_cast().
The expansion of the latter, in turn, contains a variable
initialization.

Since MISRA considers the initialization (even of a local variable)
a side effect, the chain of expansions mentioned above violates
MISRA C:2012 Rule 13.6 (The operand of the `sizeof' operator shall not
contain any expression which has potential side effect).

Refactor the code to address the rule violation.

Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Federico Serafini <federico.serafini@bugseng.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
This commit is contained in:
Federico Serafini authored and Stefano Stabellini committed 2024-10-04 14:23:15 -07:00
1 parent 1223375d8b
commit 6f621f23bc
1 file changed
+10 -2
+10 -2
View File
@@ -250,14 +250,20 @@ int efi_get_info(uint32_t idx, union xenpf_efi_info *info)
info->cfg.addr = __pa(efi_ct);
info->cfg.nent = efi_num_ct;
break;
case XEN_FW_EFI_VENDOR:
{
XEN_GUEST_HANDLE_PARAM(CHAR16) vendor_name =
guest_handle_cast(info->vendor.name, CHAR16);
if ( !efi_fw_vendor )
return -EOPNOTSUPP;
info->vendor.revision = efi_fw_revision;
n = info->vendor.bufsz / sizeof(*efi_fw_vendor);
if ( !guest_handle_okay(guest_handle_cast(info->vendor.name,
CHAR16), n) )
if ( !guest_handle_okay(vendor_name, n) )
return -EFAULT;
for ( i = 0; i < n; ++i )
{
if ( __copy_to_guest_offset(info->vendor.name, i,
@@ -267,6 +273,8 @@ int efi_get_info(uint32_t idx, union xenpf_efi_info *info)
break;
}
break;
}
case XEN_FW_EFI_MEM_INFO:
for ( i = 0; i < efi_memmap_size; i += efi_mdesc_size )
{
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.