|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: New MISRA C:2012 R10.3 violations due to XSA-438 fix
On 20/09/2023 5:25 pm, Nicola Vetrini wrote:
> Hi all,
>
> In light of the recent changes introduced by commit
> fb0ff49fe9f784bfee0370c2a3c5f20e39d7a1cb,
> as part of XSA-438 [1], the signature of function pointer 'update_cr3' in
> 'xen/arch/x86/include/asm/paging.h', line 121, changed its second parameter
> to a boolean.
> Consequently, all calls to that function should use a boolean to comply with
> MISRA C:2012
> Rule 10.3 ("The value of an expression shall not be assigned to an object
> with a narrower
> essential type or of a different essential type category"), but they still
> use integers.
> These were the ones I can find:
> xen/arch/x86/include/asm/paging.h:299: return
> paging_get_hostmode(v)->update_cr3(v, 1, noflush);
> xen/arch/x86/mm/hap/hap.c:797: hap_update_cr3(v, 0, false);
> xen/arch/x86/mm/shadow/common.c:2513: v->arch.paging.mode->update_cr3(v,
> 0, false);
> xen/arch/x86/mm/shadow/multi.c:2478:
> v->arch.paging.mode->update_cr3(v, 0, false);
>
> [1]
> https://lore.kernel.org/xen-devel/E1qitNQ-0001Pu-0K@xxxxxxxxxxxxxxxxxxxxxx/
>
Hmm yes - the int->bool conversion is not relevant to the rest of the
change, and shouldn't have been part of a security fix even before
taking MISRA into consideration.
I truly detest APIs like this - whether it's 0/1 or true/false, the
callsites are unreadable due to the obfuscation.
However, Xen even has paging_lock_recursive() for the cases where the
paging lock may or may not be held, and needs to be. So I'm fairly sure
the do_locking parameter is bogus in the first place.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |