|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/hvm: Clean up track_dirty_vram() calltree
On 22/07/2020 17:13, Jan Beulich wrote:
> On 22.07.2020 17:15, Andrew Cooper wrote:
>> * Rename nr to nr_frames. A plain 'nr' is confusing to follow in the the
>> lower levels.
>> * Use DIV_ROUND_UP() rather than opencoding it in several different ways
>> * The hypercall input is capped at uint32_t, so there is no need for
>> nr_frames to be unsigned long in the lower levels.
>>
>> No functional change.
>>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> I'd like to note though that ...
>
>> --- a/xen/arch/x86/mm/hap/hap.c
>> +++ b/xen/arch/x86/mm/hap/hap.c
>> @@ -58,16 +58,16 @@
>>
>> int hap_track_dirty_vram(struct domain *d,
>> unsigned long begin_pfn,
>> - unsigned long nr,
>> + unsigned int nr_frames,
>> XEN_GUEST_HANDLE(void) guest_dirty_bitmap)
>> {
>> long rc = 0;
>> struct sh_dirty_vram *dirty_vram;
>> uint8_t *dirty_bitmap = NULL;
>>
>> - if ( nr )
>> + if ( nr_frames )
>> {
>> - int size = (nr + BITS_PER_BYTE - 1) / BITS_PER_BYTE;
>> + unsigned int size = DIV_ROUND_UP(nr_frames, BITS_PER_BYTE);
> ... with the change from long to int this construct will now no
> longer be correct for the (admittedly absurd) case of a hypercall
> input in the range of [0xfffffff9,0xffffffff]. We now fully
> depend on this getting properly rejected at the top level hypercall
> handler (which limits to 1Gb worth of tracked space).
I don't see how this makes any difference at all.
Exactly the same would be true in the old code for an input in the range
[0xfffffffffffffff9,0xffffffffffffffff], where the aspect which protects
you is the fact that the hypercall ABI truncates to 32 bits.
If you want a non-overflowing DIV_ROUND_UP(), the appropriate expression
in (x / a) + !!(x % a), but I don't think its reasonable to use the type
of this variable as a credible defence-in-depth argument against the
audit logic making a mistake, or that it is worth worrying about audit
mistakes in the first place. If there are any audit mistakes, so much
more can potentially go wrong than this corner case.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |