Skip to content

Commit

Permalink
linux-user: fix O_TMPFILE handling
Browse files Browse the repository at this point in the history
Since O_TMPFILE might differ between guest and host,
add it to the bitmask_transtbl. While at it, fix the definitions
of O_DIRECTORY etc which should arm32 according to kernel sources.

This fixes open14 and openat03 ltp testcases. Fixes:

https://bugs.launchpad.net/qemu/+bug/1709170
  • Loading branch information
Riku Voipio committed Oct 16, 2017
1 parent 40a1e8a commit 5f9cee4
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
4 changes: 4 additions & 0 deletions linux-user/strace.c
Expand Up @@ -837,6 +837,10 @@ UNUSED static struct flags open_flags[] = {
#endif
#ifdef O_PATH
FLAG_TARGET(O_PATH),
#endif
#ifdef O_TMPFILE
FLAG_TARGET(O_TMPFILE),
FLAG_TARGET(__O_TMPFILE),
#endif
FLAG_END,
};
Expand Down
3 changes: 3 additions & 0 deletions linux-user/syscall.c
Expand Up @@ -341,6 +341,9 @@ static bitmask_transtbl fcntl_flags_tbl[] = {
#endif
#if defined(O_PATH)
{ TARGET_O_PATH, TARGET_O_PATH, O_PATH, O_PATH },
#endif
#if defined(O_TMPFILE)
{ TARGET_O_TMPFILE, TARGET_O_TMPFILE, O_TMPFILE, O_TMPFILE },
#endif
/* Don't terminate the list prematurely on 64-bit host+guest. */
#if TARGET_O_LARGEFILE != 0 || O_LARGEFILE != 0
Expand Down
8 changes: 7 additions & 1 deletion linux-user/syscall_defs.h
Expand Up @@ -2416,7 +2416,7 @@ struct target_statfs64 {
#define TARGET_O_CLOEXEC 010000000
#define TARGET___O_SYNC 000100000
#define TARGET_O_PATH 020000000
#elif defined(TARGET_ARM) || defined(TARGET_M68K)
#elif defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_AARCH64)
#define TARGET_O_DIRECTORY 040000 /* must be a directory */
#define TARGET_O_NOFOLLOW 0100000 /* don't follow links */
#define TARGET_O_DIRECT 0200000 /* direct disk access hint */
Expand Down Expand Up @@ -2513,6 +2513,12 @@ struct target_statfs64 {
#ifndef TARGET_O_PATH
#define TARGET_O_PATH 010000000
#endif
#ifndef TARGET___O_TMPFILE
#define TARGET___O_TMPFILE 020000000
#endif
#ifndef TARGET_O_TMPFILE
#define TARGET_O_TMPFILE (TARGET___O_TMPFILE | TARGET_O_DIRECTORY)
#endif
#ifndef TARGET_O_NDELAY
#define TARGET_O_NDELAY TARGET_O_NONBLOCK
#endif
Expand Down

0 comments on commit 5f9cee4

Please sign in to comment.