[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] guestcopy: evaluate {, __}copy{, _field}_to_guest*() arguments just once
There's nothing wrong with having e.g. copy_to_guest(uarg, ptr++, 1); yet until now this would increment "ptr" twice. Also drop a pair of unneeded parentheses from every instance at this occasion. Fixes: b7954cc59831 ("Enhance guest memory accessor macros so that source operands can be") Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- Arm side untested so far, as I don't have all the tool chain pieces available at home. --- This goes on top of the assumed v2 of Julien's "xen/guest_access: Harden copy_to_guest_offset to prevent const dest operand". --- a/xen/include/asm-arm/guest_access.h +++ b/xen/include/asm-arm/guest_access.h @@ -79,7 +79,7 @@ int access_guest_memory_by_ipa(struct do const typeof(*(ptr)) *_s = (ptr); \ char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \ void *__maybe_unused _t = (hnd).p; \ - ((void)((hnd).p == (ptr))); \ + (void)((hnd).p == _s); \ raw_copy_to_guest(_d+(off), _s, sizeof(*_s)*(nr)); \ }) @@ -106,7 +106,7 @@ int access_guest_memory_by_ipa(struct do #define copy_field_to_guest(hnd, ptr, field) ({ \ const typeof(&(ptr)->field) _s = &(ptr)->field; \ void *_d = &(hnd).p->field; \ - ((void)(&(hnd).p->field == &(ptr)->field)); \ + (void)(&(hnd).p->field == _s); \ raw_copy_to_guest(_d, _s, sizeof(*_s)); \ }) @@ -129,7 +129,7 @@ int access_guest_memory_by_ipa(struct do const typeof(*(ptr)) *_s = (ptr); \ char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \ void *__maybe_unused _t = (hnd).p; \ - ((void)((hnd).p == (ptr))); \ + (void)((hnd).p == _s); \ __raw_copy_to_guest(_d+(off), _s, sizeof(*_s)*(nr));\ }) @@ -146,7 +146,7 @@ int access_guest_memory_by_ipa(struct do #define __copy_field_to_guest(hnd, ptr, field) ({ \ const typeof(&(ptr)->field) _s = &(ptr)->field; \ void *_d = &(hnd).p->field; \ - ((void)(&(hnd).p->field == &(ptr)->field)); \ + (void)(&(hnd).p->field == _s); \ __raw_copy_to_guest(_d, _s, sizeof(*_s)); \ }) --- a/xen/include/asm-x86/guest_access.h +++ b/xen/include/asm-x86/guest_access.h @@ -88,7 +88,7 @@ const typeof(*(ptr)) *_s = (ptr); \ char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \ void *__maybe_unused _t = (hnd).p; \ - ((void)((hnd).p == (ptr))); \ + (void)((hnd).p == _s); \ raw_copy_to_guest(_d+(off), _s, sizeof(*_s)*(nr)); \ }) @@ -111,7 +111,7 @@ #define copy_field_to_guest(hnd, ptr, field) ({ \ const typeof(&(ptr)->field) _s = &(ptr)->field; \ void *_d = &(hnd).p->field; \ - ((void)(&(hnd).p->field == &(ptr)->field)); \ + (void)(&(hnd).p->field == _s); \ raw_copy_to_guest(_d, _s, sizeof(*_s)); \ }) @@ -139,7 +139,7 @@ const typeof(*(ptr)) *_s = (ptr); \ char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \ void *__maybe_unused _t = (hnd).p; \ - ((void)((hnd).p == (ptr))); \ + (void)((hnd).p == _s); \ __raw_copy_to_guest(_d+(off), _s, sizeof(*_s)*(nr));\ }) @@ -157,7 +157,7 @@ #define __copy_field_to_guest(hnd, ptr, field) ({ \ const typeof(&(ptr)->field) _s = &(ptr)->field; \ void *_d = &(hnd).p->field; \ - ((void)(&(hnd).p->field == &(ptr)->field)); \ + (void)(&(hnd).p->field == _s); \ __raw_copy_to_guest(_d, _s, sizeof(*_s)); \ })
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |