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" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html