[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [XEN, 32on64]: Correct continuation translation for large
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1196940242 0 # Node ID 46776e65e6796f7751a15649f275b78e848d7ed5 # Parent 1936e6a79f850b91d2c4336df3405c20066e9a7f [XEN, 32on64]: Correct continuation translation for large compat_mmuext hypercalls. At the point where we translate the continuation "nat_ops" points to the beginning of the batch of "i" entries, therefore it must be incremented by the number of entries processed "i - left". At the same point "cmp_uops" points to the end of the batch of entries and must therefore be decremented by "left". The new count value has already been set by do_mmuext_op to "left" and therefore it is correct to add "count - i" since that is the number of entries that remain after this batch. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxxxxx> --- xen/arch/x86/x86_64/compat/mm.c | 5 ++--- xen/include/asm-x86/guest_access.h | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff -r 1936e6a79f85 -r 46776e65e679 xen/arch/x86/x86_64/compat/mm.c --- a/xen/arch/x86/x86_64/compat/mm.c Thu Dec 06 11:23:04 2007 +0000 +++ b/xen/arch/x86/x86_64/compat/mm.c Thu Dec 06 11:24:02 2007 +0000 @@ -298,9 +298,8 @@ int compat_mmuext_op(XEN_GUEST_HANDLE(mm BUG_ON(left == arg1); BUG_ON(left > count); - guest_handle_add_offset(nat_ops, count - left); - BUG_ON(left + i < count); - guest_handle_add_offset(cmp_uops, (signed int)(count - left - i)); + guest_handle_add_offset(nat_ops, i - left); + guest_handle_subtract_offset(cmp_uops, left); left = 1; BUG_ON(!hypercall_xlat_continuation(&left, 0x01, nat_ops, cmp_uops)); BUG_ON(left != arg1); diff -r 1936e6a79f85 -r 46776e65e679 xen/include/asm-x86/guest_access.h --- a/xen/include/asm-x86/guest_access.h Thu Dec 06 11:23:04 2007 +0000 +++ b/xen/include/asm-x86/guest_access.h Thu Dec 06 11:24:02 2007 +0000 @@ -17,6 +17,7 @@ /* Offset the given guest handle into the array it refers to. */ #define guest_handle_add_offset(hnd, nr) ((hnd).p += (nr)) +#define guest_handle_subtract_offset(hnd, nr) ((hnd).p -= (nr)) /* Cast a guest handle to the specified type of handle. */ #define guest_handle_cast(hnd, type) ({ \ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |