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

Avi Kivity <[email protected]> Fri, 23 Apr 2010 11:57:17 +0000
Newsgroups org.kernel.vger.kvm-ia64,org.kernel.vger.kvm,org.kernel.vger.kvm-ppc
Message-ID <[email protected]>
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.