Skip to content

Commit

Permalink
linux-user: Use safe_syscall for open and openat system calls
Browse files Browse the repository at this point in the history
Restart open() and openat() if signals occur before,
or during with SA_RESTART.

Signed-off-by: Timothy Edward Baldwin <[email protected]>
Message-id: 1441497448-32489-17-git-send-email-T.E.Baldwin99@members.leeds.ac.uk
[PMM: Adjusted to follow new -1-and-set-errno safe_syscall convention]
Signed-off-by: Peter Maydell <[email protected]>
Signed-off-by: Riku Voipio <[email protected]>
  • Loading branch information
TimothyEBaldwin authored and Riku Voipio committed May 27, 2016
1 parent 50afd02 commit c10a073
Showing 1 changed file with 4 additions and 14 deletions.
18 changes: 4 additions & 14 deletions linux-user/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit c10a073

Please sign in to comment.