semihosting: Simplify softmmu_lock_user_string

We are not currently bounding the search to the 1024 bytes
that we allocated, possibly overrunning the buffer.
Use softmmu_strlen_user to find the length and allocate the
correct size from the beginning.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-04-27 21:06:58 -07:00
parent 5f9ca6f3c5
commit 3d5e2b4f26

View File

@ -74,20 +74,11 @@ ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr)
char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr) char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr)
{ {
/* TODO: Make this something that isn't fixed size. */ ssize_t len = softmmu_strlen_user(env, addr);
char *s = malloc(1024); if (len < 0) {
size_t len = 0;
if (!s) {
return NULL; return NULL;
} }
do { return softmmu_lock_user(env, addr, len + 1, true);
if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) {
free(s);
return NULL;
}
} while (s[len++]);
return s;
} }
void softmmu_unlock_user(CPUArchState *env, void *p, void softmmu_unlock_user(CPUArchState *env, void *p,