Re: [PATCH RFC v2 6/6] KVM: introduce a new API for getting dirty bitmaps

Alexander Graf
2010-04-23T12:26:26Z

On 23.04.2010, at 13:57, Avi Kivity wrote:

> On 04/23/2010 01:20 PM, Alexander Graf wrote:
>>
>>> I would say the reason is that if we did not convert the user-space pointer to
>>> a "void *" kvm_get_dirty_log() would end up copying the dirty log to
>>>
>>> (log->dirty_bitmap<< 32) | 0x00000000
>>>
>> Well yes, that was the problem. If we always set the __u64 value to the pointer we're safe though.
>>
>> union {
>> void *p;
>> __u64 q;
>> }
>>
>> void x(void *r)
>> {
>> // breaks:
>> p = r;
>>
>> // works:
>> q = (ulong)r;
>> }
>>
>
> In that case it's better to avoid p altogether, since users will naturally assign to the pointer.
>
> Using a 64-bit integer avoids the problem (though perhaps not sufficient for s390, Arnd?)

We only support 64 bit on S390, so we should be safe here. Even if not, compat mode has 31 bits pointers, so padding them to 64 bit should work too.

Alex