On Wed, 3 Feb 2021 at 19:00, Richard Henderson <richard.hender...@linaro.org> wrote: > > Resolve the untagged address once, using thread_cpu. > Tidy the DEBUG_REMAP code using glib routines. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > linux-user/uaccess.c | 29 +++++++++++++++-------------- > 1 file changed, 15 insertions(+), 14 deletions(-) > > diff --git a/linux-user/uaccess.c b/linux-user/uaccess.c > index 30d01f8b30..c696913016 100644 > --- a/linux-user/uaccess.c > +++ b/linux-user/uaccess.c > @@ -6,36 +6,37 @@ > > void *lock_user(int type, abi_ulong guest_addr, size_t len, bool copy) > { > + void *host_addr; > + > + guest_addr = cpu_untagged_addr(thread_cpu, guest_addr); > if (!access_ok_untagged(type, guest_addr, len)) { > return NULL; > } > + host_addr = g2h_untagged(guest_addr); > #ifdef DEBUG_REMAP > - { > - void *addr; > - addr = g_malloc(len); > - if (copy) { > - memcpy(addr, g2h(guest_addr), len); > - } else { > - memset(addr, 0, len); > - } > - return addr; > + if (copy) { > + host_addr = g_memdup(host_addr, len); > + } else { > + host_addr = g_malloc0(len); > } > -#else > - return g2h_untagged(guest_addr); > #endif > + return host_addr; > } > > #ifdef DEBUG_REMAP > void unlock_user(void *host_ptr, abi_ulong guest_addr, size_t len); > { > + void *host_ptr_conv; > + > if (!host_ptr) { > return; > } > - if (host_ptr == g2h_untagged(guest_addr)) { > + host_ptr_conv = g2h(thread_cpu, guest_addr); > + if (host_ptr == host_ptr_conv) { > return; > } > - if (len > 0) { > - memcpy(g2h_untagged(guest_addr), host_ptr, len); > + if (len != 0) { > + memcpy(host_ptr_conv, host_ptr, len); > }
Why the change from checking >0 to checking !=0 ? I'd rather not have to go through and audit all the callsites to confirm none of them pass a "length-or-negative-errno" value here... thanks -- PMM