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.