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

Avi Kivity
2010-04-23T11:57:17Z

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?)

--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.