On Mon, 26 Feb 2024 at 09:49, Philippe Mathieu-Daudé <phi...@linaro.org> wrote: > > Hi, > > On 26/2/24 10:06, dinglimin wrote: > > Signed-off-by: dinglimin <dingli...@cmss.chinamobile.com> > > --- > > semihosting/uaccess.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/semihosting/uaccess.c b/semihosting/uaccess.c > > index dc587d73bc..7788ead9b2 100644 > > --- a/semihosting/uaccess.c > > +++ b/semihosting/uaccess.c > > @@ -14,10 +14,10 @@ > > void *uaccess_lock_user(CPUArchState *env, target_ulong addr, > > target_ulong len, bool copy) > > { > > - void *p = malloc(len); > > + void *p = g_try_malloc(len); > > if (p && copy) { > > if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) { > > - free(p); > > + g_free(p); > > p = NULL; > > } > > } > > This seems dangerous, now all users of uaccess_lock_user() must > use g_free(), in particular lock_user_string() which is used more > than a hundred of times:
Users of lock_user_string() and other lock_user() functions are supposed to unlock via unlock_user(); if they directly call either free() or g_free() they have a bug. -- PMM