[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 24/28] linux-user: Use safe_syscall for open and
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH v2 24/28] linux-user: Use safe_syscall for open and openat system calls |
Date: |
Thu, 12 May 2016 18:47:48 +0100 |
From: Timothy E Baldwin <address@hidden>
Restart open() and openat() if signals occur before,
or during with SA_RESTART.
Signed-off-by: Timothy Edward Baldwin <address@hidden>
Message-id: address@hidden
[PMM: Adjusted to follow new -1-and-set-errno safe_syscall convention]
Signed-off-by: Peter Maydell <address@hidden>
---
linux-user/syscall.c | 18 ++++--------------
1 file changed, 4 insertions(+), 14 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index bee1360..0037ee7 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -359,18 +359,6 @@ static int sys_getcwd1(char *buf, size_t size)
return strlen(buf)+1;
}
-static int sys_openat(int dirfd, const char *pathname, int flags, mode_t mode)
-{
- /*
- * open(2) has extra parameter 'mode' when called with
- * flag O_CREAT.
- */
- if ((flags & O_CREAT) != 0) {
- return (openat(dirfd, pathname, flags, mode));
- }
- return (openat(dirfd, pathname, flags));
-}
-
#ifdef TARGET_NR_utimensat
#ifdef CONFIG_UTIMENSAT
static int sys_utimensat(int dirfd, const char *pathname,
@@ -709,6 +697,8 @@ static type safe_##name(type1 arg1, type2 arg2, type3 arg3,
type4 arg4, \
safe_syscall3(ssize_t, read, int, fd, void *, buff, size_t, count)
safe_syscall3(ssize_t, write, int, fd, const void *, buff, size_t, count)
+safe_syscall4(int, openat, int, dirfd, const char *, pathname, \
+ int, flags, mode_t, mode)
static inline int host_to_target_sock_type(int host_type)
{
@@ -5851,7 +5841,7 @@ static int do_openat(void *cpu_env, int dirfd, const char
*pathname, int flags,
if (is_proc_myself(pathname, "exe")) {
int execfd = qemu_getauxval(AT_EXECFD);
- return execfd ? execfd : sys_openat(dirfd, exec_path, flags, mode);
+ return execfd ? execfd : safe_openat(dirfd, exec_path, flags, mode);
}
for (fake_open = fakes; fake_open->filename; fake_open++) {
@@ -5887,7 +5877,7 @@ static int do_openat(void *cpu_env, int dirfd, const char
*pathname, int flags,
return fd;
}
- return sys_openat(dirfd, path(pathname), flags, mode);
+ return safe_openat(dirfd, path(pathname), flags, mode);
}
#define TIMER_MAGIC 0x0caf0000
--
1.9.1
- [Qemu-devel] [PATCH v2 20/28] linux-user: Support for restarting system calls for Microblaze targets, (continued)
- [Qemu-devel] [PATCH v2 20/28] linux-user: Support for restarting system calls for Microblaze targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 25/28] linux-user: Use safe_syscall for wait system calls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 07/28] linux-user: Support for restarting system calls for ARM targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 13/28] linux-user: Support for restarting system calls for UniCore32 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 04/28] linux-user: Define TARGET_ERESTART* errno values, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 22/28] linux-user: Provide safe_syscall for fixing races between signals and syscalls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 06/28] linux-user: Support for restarting system calls for x86 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 02/28] linux-user: Consistently return host errnos from do_openat(), Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 27/28] linux-user: Use safe_syscall for pselect, select syscalls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 24/28] linux-user: Use safe_syscall for open and openat system calls,
Peter Maydell <=
- [Qemu-devel] [PATCH v2 14/28] linux-user: Support for restarting system calls for OpenRISC targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 19/28] linux-user: Set r14 on exit from microblaze syscall, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 12/28] linux-user: Support for restarting system calls for Alpha targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 23/28] linux-user: Use safe_syscall for read and write system calls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 08/28] linux-user: Support for restarting system calls for MIPS targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 16/28] linux-user: Support for restarting system calls for S390 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 03/28] linux-user: Reindent signal handling, Peter Maydell, 2016/05/12