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.

--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to