From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Date: Fri, 23 Apr 2010 11:57:17 +0000 Subject: Re: [PATCH RFC v2 6/6] KVM: introduce a new API for getting dirty Message-Id: <4BD18B1D.1080604@redhat.com> List-Id: References: <20100420200353.2d2a6dec.yoshikawa.takuya@oss.ntt.co.jp> In-Reply-To: <20100420200353.2d2a6dec.yoshikawa.takuya@oss.ntt.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ia64@vger.kernel.org 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.