[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 07/33] linux-user: Propagate goto fail to return
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 07/33] linux-user: Propagate goto fail to return |
Date: |
Fri, 1 Jun 2018 00:30:24 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
linux-user/syscall.c | 62 ++++++++++++++++----------------------------
1 file changed, 23 insertions(+), 39 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 4269ec2c23..a413aad658 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9001,8 +9001,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
how = SIG_SETMASK;
break;
default:
- ret = -TARGET_EINVAL;
- goto fail;
+ return -TARGET_EINVAL;
}
mask = arg2;
target_to_host_old_sigset(&set, &mask);
@@ -9029,8 +9028,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
how = SIG_SETMASK;
break;
default:
- ret = -TARGET_EINVAL;
- goto fail;
+ return -TARGET_EINVAL;
}
if (!(p = lock_user(VERIFY_READ, arg2,
sizeof(target_sigset_t), 1)))
return -TARGET_EFAULT;
@@ -9073,8 +9071,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
how = SIG_SETMASK;
break;
default:
- ret = -TARGET_EINVAL;
- goto fail;
+ return -TARGET_EINVAL;
}
if (!(p = lock_user(VERIFY_READ, arg2,
sizeof(target_sigset_t), 1)))
return -TARGET_EFAULT;
@@ -9363,15 +9360,15 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
ret = copy_from_user_fdset_ptr(&rfds, &rfds_ptr, rfd_addr, n);
if (ret) {
- goto fail;
+ return ret;
}
ret = copy_from_user_fdset_ptr(&wfds, &wfds_ptr, wfd_addr, n);
if (ret) {
- goto fail;
+ return ret;
}
ret = copy_from_user_fdset_ptr(&efds, &efds_ptr, efd_addr, n);
if (ret) {
- goto fail;
+ return ret;
}
if (contains_hostfd(&rfds) ||
contains_hostfd(&wfds) ||
@@ -9409,8 +9406,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
sig.set = &set;
if (arg_sigsize != sizeof(*target_sigset)) {
/* Like the kernel, we enforce correct size sigsets */
- ret = -TARGET_EINVAL;
- goto fail;
+ return -TARGET_EINVAL;
}
target_sigset = lock_user(VERIFY_READ, arg_sigset,
sizeof(*target_sigset), 1);
@@ -9951,18 +9947,15 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
case TARGET_SYSLOG_ACTION_READ_CLEAR: /* Read/clear msgs */
case TARGET_SYSLOG_ACTION_READ_ALL: /* Read last messages */
{
- ret = -TARGET_EINVAL;
if (len < 0) {
- goto fail;
+ return -TARGET_EINVAL;
}
- ret = 0;
if (len == 0) {
- return ret;
+ return 0;
}
p = lock_user(VERIFY_WRITE, arg2, arg3, 0);
if (!p) {
- ret = -TARGET_EFAULT;
- goto fail;
+ return -TARGET_EFAULT;
}
ret = get_errno(sys_syslog((int)arg1, p, (int)arg3));
unlock_user(p, arg2, arg3);
@@ -10363,8 +10356,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
dirp = g_try_malloc(count);
if (!dirp) {
- ret = -TARGET_ENOMEM;
- goto fail;
+ return -TARGET_ENOMEM;
}
ret = get_errno(sys_getdents(arg1, dirp, count));
@@ -10556,7 +10548,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
if (ret < 0) {
unlock_user(target_pfd, arg1,
sizeof(struct target_pollfd) * nfds);
- goto fail;
+ return ret;
}
}
@@ -10788,7 +10780,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
arg2 ? &node : NULL,
NULL));
if (is_error(ret)) {
- goto fail;
+ return ret;
}
if (arg1 && put_user_u32(cpu, arg1)) {
return -TARGET_EFAULT;
@@ -11290,8 +11282,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
grouplist = alloca(gidsetsize * sizeof(gid_t));
target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize *
sizeof(target_id), 1);
if (!target_grouplist) {
- ret = -TARGET_EFAULT;
- goto fail;
+ return -TARGET_EFAULT;
}
for (i = 0; i < gidsetsize; i++) {
grouplist[i] = low2highgid(tswapid(target_grouplist[i]));
@@ -11552,8 +11543,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
how = SIG_SETMASK;
break;
default:
- ret = -TARGET_EINVAL;
- goto fail;
+ return -TARGET_EINVAL;
}
mask = arg2;
target_to_host_old_sigset(&set, &mask);
@@ -11601,8 +11591,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
if (!is_error(ret)) {
target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize *
4, 0);
if (!target_grouplist) {
- ret = -TARGET_EFAULT;
- goto fail;
+ return -TARGET_EFAULT;
}
for(i = 0;i < ret; i++)
target_grouplist[i] = tswap32(grouplist[i]);
@@ -11622,8 +11611,7 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
grouplist = alloca(gidsetsize * sizeof(gid_t));
target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 4, 1);
if (!target_grouplist) {
- ret = -TARGET_EFAULT;
- goto fail;
+ return -TARGET_EFAULT;
}
for(i = 0;i < gidsetsize; i++)
grouplist[i] = tswap32(target_grouplist[i]);
@@ -11704,20 +11692,17 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
#ifdef TARGET_NR_mincore
case TARGET_NR_mincore:
{
- void *a;
- ret = -TARGET_ENOMEM;
- a = lock_user(VERIFY_READ, arg1, arg2, 0);
+ void *a = lock_user(VERIFY_READ, arg1, arg2, 0);
if (!a) {
- goto fail;
+ return -TARGET_ENOMEM;
}
- ret = -TARGET_EFAULT;
p = lock_user_string(arg3);
if (!p) {
- goto mincore_fail;
+ ret = -TARGET_EFAULT;
+ } else {
+ ret = get_errno(mincore(a, arg2, p));
+ unlock_user(p, arg3, ret);
}
- ret = get_errno(mincore(a, arg2, p));
- unlock_user(p, arg3, ret);
- mincore_fail:
unlock_user(a, arg1, 0);
}
return ret;
@@ -12892,7 +12877,6 @@ static abi_long do_syscall1(void *cpu_env, int num,
abi_long arg1,
default:
return do_unimplemented(num);
}
-fail:
return ret;
}
--
2.17.0
- Re: [Qemu-devel] [PATCH 01/33] linux-user: Split out do_syscall1, (continued)
- [Qemu-devel] [PATCH 03/33] linux-user: Propagate goto ebadf to return, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 05/33] linux-user: Propagate goto unimplemented_nowarn to return, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 08/33] linux-user: Make syscall number unsigned, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 06/33] linux-user: Split out goto unimplemented to do_unimplemented, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 07/33] linux-user: Propagate goto fail to return,
Richard Henderson <=
- [Qemu-devel] [PATCH 04/33] linux-user: Propagate goto efault to return, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 12/33] linux-user: Split out open, openat, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 09/33] linux-user: Set up infrastructure for table-izing syscalls, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 10/33] linux-user: Split out brk, close, exit, read, write, Richard Henderson, 2018/06/01
- [Qemu-devel] [PATCH 02/33] linux-user: Relax single exit from "break", Richard Henderson, 2018/06/01