mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
linux-user: Allow NULL value pointer in setxattr and getxattr
It's valid to pass a NULL value pointer to setxattr, so don't fail this case EFAULT. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
5379557b8d
commit
e3c33ec6b0
1 changed files with 18 additions and 6 deletions
|
@ -7809,11 +7809,17 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
break;
|
||||
case TARGET_NR_setxattr:
|
||||
{
|
||||
void *p, *n, *v;
|
||||
void *p, *n, *v = 0;
|
||||
if (arg3) {
|
||||
v = lock_user(VERIFY_READ, arg3, arg4, 1);
|
||||
if (!v) {
|
||||
ret = -TARGET_EFAULT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
p = lock_user_string(arg1);
|
||||
n = lock_user_string(arg2);
|
||||
v = lock_user(VERIFY_READ, arg3, arg4, 1);
|
||||
if (p && n && v) {
|
||||
if (p && n) {
|
||||
ret = get_errno(setxattr(p, n, v, arg4, arg5));
|
||||
} else {
|
||||
ret = -TARGET_EFAULT;
|
||||
|
@ -7825,11 +7831,17 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|||
break;
|
||||
case TARGET_NR_getxattr:
|
||||
{
|
||||
void *p, *n, *v;
|
||||
void *p, *n, *v = 0;
|
||||
if (arg3) {
|
||||
v = lock_user(VERIFY_WRITE, arg3, arg4, 0);
|
||||
if (!v) {
|
||||
ret = -TARGET_EFAULT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
p = lock_user_string(arg1);
|
||||
n = lock_user_string(arg2);
|
||||
v = lock_user(VERIFY_WRITE, arg3, arg4, 0);
|
||||
if (p && n && v) {
|
||||
if (p && n) {
|
||||
ret = get_errno(getxattr(p, n, v, arg4));
|
||||
} else {
|
||||
ret = -TARGET_EFAULT;
|
||||
|
|
Loading…
Reference in a new issue