QEMU fails to honor O_TMPFILE
Public bug reported:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);under QEMU, we ged -EISDIR.
Under any kernel 3.11 or later, we are supposed to get an unnamed file in /tmp. In case the filesystem for /tmp does not support unnamed files, we are supposed to get EOPNOTSUPP.
[I don't know the QEMU version, since this happened in a system I don't have access to]
** Affects: qemu
Importance: Undecided
Status: New
Signature · 26 lines
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1709170
Title:
QEMU fails to honor O_TMPFILE
Status in QEMU:
New
Bug description:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);
under QEMU, we ged -EISDIR.
Under any kernel 3.11 or later, we are supposed to get an unnamed file
in /tmp. In case the filesystem for /tmp does not support unnamed
files, we are supposed to get EOPNOTSUPP.
[I don't know the QEMU version, since this happened in a system I
don't have access to]
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1709170/+subscriptionsHi Thiago,
What is the version of glibc on the targets you are building to? There was an O_TMPFILE bug in older glibc's:
https://sourceware.org/bugzilla/show_bug.cgi?id=17912
** Bug watch added: Sourceware.org Bugzilla #17912
https://sourceware.org/bugzilla/show_bug.cgi?id=17912
Signature · 26 lines
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1709170
Title:
QEMU fails to honor O_TMPFILE
Status in QEMU:
New
Bug description:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);
under QEMU, we ged -EISDIR.
Under any kernel 3.11 or later, we are supposed to get an unnamed file
in /tmp. In case the filesystem for /tmp does not support unnamed
files, we are supposed to get EOPNOTSUPP.
[I don't know the QEMU version, since this happened in a system I
don't have access to]
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1709170/+subscriptionsQuoted 11 lines · Thiago Macieira
Public bug reported:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);under QEMU, we ged
-EISDIR.Under any kernel 3.11 or later, we are supposed to get an unnamed file in /tmp. In case the filesystem for /tmp does not support unnamed files, we are supposed to get EOPNOTSUPP.
Actually, -EISDIR is valid error when underlying system doesn't support O_TMPFILE. See man openat or the kernel definition for O_TMPFILE.
Regardless, I'm submitting a patch to properly translate the O_TMPFILE.
Riku
PATCH 1/1 linux-user: fix O_TMPFILE handling
In reply to Thiago MacieiraSince O_TMPFILE might differ between guest and host,
add it to the bitmask_transtbl. While at it, fix the definitions of O_DIRECTORY etc on arm64, which are identical to arm32 according to kernel sources.
This fixes open14 and openat03 ltp testcases.
--- linux-user/strace.c | 4 ++++ linux-user/syscall.c | 3 +++ linux-user/syscall_defs.h | 8 +++++++- 3 files changed, 14 insertions(+), 1 deletion(-)
linux-user/strace.c +4 -0
@@ -838,6 +838,10 @@ UNUSED static struct flags open_flags[] = {#ifdef O_PATH FLAG_TARGET(O_PATH),#endif +#ifdef O_TMPFILE +FLAG_TARGET (O_TMPFILE ), +FLAG_TARGET (__O_TMPFILE), +#endif FLAG_END, };
linux-user/syscall.c +3 -0
@@ -342,6 +342,9 @@ static bitmask_transtbl fcntl_flags_tbl[] = { #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 { TARGET_O_LARGEFILE, TARGET_O_LARGEFILE, O_LARGEFILE, O_LARGEFILE, },
linux-user/syscall_defs.h +7 -1
@@ -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 */
@@ -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
Signature · 29 lines
2.11.0
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1709170
Title:
QEMU fails to honor O_TMPFILE
Status in QEMU:
New
Bug description:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);
under QEMU, we ged -EISDIR.
Under any kernel 3.11 or later, we are supposed to get an unnamed file
in /tmp. In case the filesystem for /tmp does not support unnamed
files, we are supposed to get EOPNOTSUPP.
[I don't know the QEMU version, since this happened in a system I
don't have access to]
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1709170/+subscriptionsIt was a Yocto 2.0 sysroot running on an Ubuntu 16.04 host.
Signature · 26 lines
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1709170
Title:
QEMU fails to honor O_TMPFILE
Status in QEMU:
New
Bug description:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);
under QEMU, we ged -EISDIR.
Under any kernel 3.11 or later, we are supposed to get an unnamed file
in /tmp. In case the filesystem for /tmp does not support unnamed
files, we are supposed to get EOPNOTSUPP.
[I don't know the QEMU version, since this happened in a system I
don't have access to]
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1709170/+subscriptionsFix has been released with QEMU 2.11:
https://git.qemu.org/?p=qemu.git;a=commitdiff;h=5f9cee46cd4ec4600e1a
** Changed in: qemu
Status: New => Fix Released
Signature · 26 lines
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1709170
Title:
QEMU fails to honor O_TMPFILE
Status in QEMU:
Fix Released
Bug description:
When making a call like
open("/tmp", O_TMPFILE | O_RDWR);
under QEMU, we ged -EISDIR.
Under any kernel 3.11 or later, we are supposed to get an unnamed file
in /tmp. In case the filesystem for /tmp does not support unnamed
files, we are supposed to get EOPNOTSUPP.
[I don't know the QEMU version, since this happened in a system I
don't have access to]
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1709170/+subscriptions