Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[qemu-usermode] make sure utimensat from glibc is being used so sb2 c…
…an wrap it. JB#48738
  • Loading branch information
krnlyng committed Jan 29, 2020
1 parent a6131e1 commit c90ac8d
Show file tree
Hide file tree
Showing 16 changed files with 168 additions and 28 deletions.
@@ -1,7 +1,7 @@
From acbb87f1915e788219b6d1e8d62ae310ebdd9ec2 Mon Sep 17 00:00:00 2001
From 39cd8ca6a0314c5e44bd8265d76ab3304b2c56f0 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 10:47:20 +0200
Subject: [PATCH 01/15] Revert "linux-user: Use safe_syscall for open and
Subject: [PATCH 01/16] Revert "linux-user: Use safe_syscall for open and
openat system calls"

This reverts commit c10a07387b77b94d8f7233f3b5bb559211d4e49a.
Expand Down
@@ -1,7 +1,7 @@
From 38f5866fc9da3ad25724191e886b6f6e986aab4e Mon Sep 17 00:00:00 2001
From 12799301407de446fa6e5737fc13f2ff1b7ba5dd Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 10:48:18 +0200
Subject: [PATCH 02/15] Revert "linux-user: Use safe_syscall for execve
Subject: [PATCH 02/16] Revert "linux-user: Use safe_syscall for execve
syscall"

This reverts commit ffdcbe223d23461669869e85786145cce65e1e8c.
Expand Down
@@ -1,7 +1,7 @@
From e3a13875689ead863643186255f50029e28b8284 Mon Sep 17 00:00:00 2001
From e3b9af32def2b414035233bbb9cb623635318171 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 10:57:53 +0200
Subject: [PATCH 03/15] Revert "linux-user: Use safe_syscall wrapper for send*
Subject: [PATCH 03/16] Revert "linux-user: Use safe_syscall wrapper for send*
and recv* syscalls"

This reverts commit 666875306e03e1f94e1d4c808502585c10abc69a.
Expand Down
@@ -1,7 +1,7 @@
From 6ce026bd7ddb32af4248c8a4272fe33e27a90019 Mon Sep 17 00:00:00 2001
From 10b5ebe56a71913eb00241978ac6956e9e33a997 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 10:59:47 +0200
Subject: [PATCH 04/15] Revert "linux-user: Use safe_syscall wrapper for accept
Subject: [PATCH 04/16] Revert "linux-user: Use safe_syscall wrapper for accept
and accept4 syscalls"

This reverts commit ff6dc130794bcd5b2033bc50262a7720285a74c7.
Expand Down
@@ -1,7 +1,7 @@
From 7fcc86b96caa1aa2495176cc96d1810d719e8894 Mon Sep 17 00:00:00 2001
From b92a3ef5f94971bc51ac0890279980cb8b75756c Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 11:00:44 +0200
Subject: [PATCH 05/15] Revert "linux-user: Use safe_syscall for wait system
Subject: [PATCH 05/16] Revert "linux-user: Use safe_syscall for wait system
calls"

This reverts commit 4af80a3783950380df85ecca78aea3e3bad2e846.
Expand Down
@@ -1,7 +1,7 @@
From a6dfe9ae942d85e6848645cc11f558d873d88e9d Mon Sep 17 00:00:00 2001
From e03333501ddbe3687578d021b9f61b7011cf40de Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 11:13:13 +0200
Subject: [PATCH 06/15] Revert "linux-user: Use safe_syscall wrapper for
Subject: [PATCH 06/16] Revert "linux-user: Use safe_syscall wrapper for
connect syscall"

This reverts commit 2a3c7619288af9cfcc09a233dce911bf80849dfb.
Expand Down
@@ -1,7 +1,7 @@
From 6c2c5341b76e9727cde25280e34a39bfd3a61552 Mon Sep 17 00:00:00 2001
From 22f3a5a6d805bce44863e5ccb4319e7ecc6c51a0 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 29 Jan 2020 12:49:43 +0200
Subject: [PATCH 07/15] Revert "linux-user: Use direct syscall for utimensat"
Subject: [PATCH 07/16] Revert "linux-user: Use direct syscall for utimensat"

This reverts commit 700fa58e4b9100d6bd77df06d2e5d1f457720c4d.
---
Expand Down
@@ -1,7 +1,7 @@
From fdedc2c49c4408b4c4cbd0dd5e1089fa613425aa Mon Sep 17 00:00:00 2001
From 5c2aa1e2f83457d9fca017544b5c54442426b638 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 22 Jan 2020 23:59:11 +0200
Subject: [PATCH 08/15] Revert "target/arm: Use vector operations for
Subject: [PATCH 08/16] Revert "target/arm: Use vector operations for
saturation"

This reverts commit 89e68b575e138d0af1435f11a8ffcd8779c237bd.
Expand Down
@@ -1,7 +1,7 @@
From a2e4c01d361c0f9a0cfad00377e1a2773ae99407 Mon Sep 17 00:00:00 2001
From f1035bb69375180d64633c7ce4d4032fa9288e87 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Thu, 23 Jan 2020 00:13:32 +0000
Subject: [PATCH 09/15] linux-user: Also ignore attempts to block SIGTERM,
Subject: [PATCH 09/16] linux-user: Also ignore attempts to block SIGTERM,
SIGINT and SIGHUP

---
Expand Down
@@ -1,7 +1,7 @@
From c4b778f135b6418a10d5786910e6ea91660b364b Mon Sep 17 00:00:00 2001
From a0ea1b3374840810908866708a80b9b19d0c7ca4 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Thu, 23 Jan 2020 14:28:06 +0000
Subject: [PATCH 10/15] Revert "tcg/i386: Fix dupi/dupm for avx1 and 32-bit
Subject: [PATCH 10/16] Revert "tcg/i386: Fix dupi/dupm for avx1 and 32-bit
hosts"

This reverts commit 7b60ef3264e9627ac6efb34e9a6130647e9b55c0.
Expand Down
4 changes: 2 additions & 2 deletions rpm/0011-Revert-tcg-i386-Implement-tcg_out_dupm_vec.patch
@@ -1,7 +1,7 @@
From 1fa021b23ce5e4ef5bc030a31a006c21c520dd7c Mon Sep 17 00:00:00 2001
From b4f47da302e76c4c18d402e1bba7dff158433c08 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Thu, 23 Jan 2020 14:29:04 +0000
Subject: [PATCH 11/15] Revert "tcg/i386: Implement tcg_out_dupm_vec"
Subject: [PATCH 11/16] Revert "tcg/i386: Implement tcg_out_dupm_vec"

This reverts commit 1e262b49b5331441f697461e4305fe06719758a7.
---
Expand Down
4 changes: 2 additions & 2 deletions rpm/0012-Revert-target-arm-Use-gvec-for-VSRI-VSLI.patch
@@ -1,7 +1,7 @@
From 129c255665aa0e0a2b53fd01a2690bd2c7103375 Mon Sep 17 00:00:00 2001
From 3d6ef81c2af3433a2abd5a1a91c94e87446864dc Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Thu, 23 Jan 2020 14:46:53 +0000
Subject: [PATCH 12/15] Revert "target/arm: Use gvec for VSRI, VSLI"
Subject: [PATCH 12/16] Revert "target/arm: Use gvec for VSRI, VSLI"

This reverts commit f3cd8218d1d3e534877ce3f3cb61c6757d10f9df.

Expand Down
@@ -1,7 +1,7 @@
From b78a2fb9c22864e694146ed7f9b3bb51c41e20b0 Mon Sep 17 00:00:00 2001
From 27902ccf61f501962f5841602abcad9d99ea89f3 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Mon, 27 Jan 2020 20:34:21 +0200
Subject: [PATCH 13/15] crypto: check if getrandom is available properly
Subject: [PATCH 13/16] crypto: check if getrandom is available properly

---
crypto/random-platform.c | 16 ++++++++++++----
Expand Down
4 changes: 2 additions & 2 deletions rpm/0014-Revert-tcg-Add-INDEX_op_dupm_vec.patch
@@ -1,7 +1,7 @@
From 07e65e4bbf0b0e9adbb4d35a6b2881fa609c92b8 Mon Sep 17 00:00:00 2001
From 9d9a03c9bc6527ebdc6274dad224561059be0dfe Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Tue, 28 Jan 2020 13:39:19 +0000
Subject: [PATCH 14/15] Revert "tcg: Add INDEX_op_dupm_vec"
Subject: [PATCH 14/16] Revert "tcg: Add INDEX_op_dupm_vec"

This reverts commit 37ee55a081b7863ffab2151068dd1b2f11376914.

Expand Down
138 changes: 138 additions & 0 deletions rpm/0016-Revert-util-drop-old-utimensat-compat-code.patch
@@ -0,0 +1,138 @@
From 1a464d4a8eec73e1a481c9b02787ce24ac9a79d3 Mon Sep 17 00:00:00 2001
From: Frajo Haider <f_haider@gmx.at>
Date: Wed, 29 Jan 2020 11:21:54 +0000
Subject: [PATCH 16/16] Revert "util: drop old utimensat() compat code"

This reverts commit fcdcf1eed2fd26bfe836080755ba4322d3c1f2cc.

Conflicts:
slirp
---
configure | 22 ++++++++++++++++++++++
include/sysemu/os-posix.h | 11 +++++++++++
util/oslib-posix.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 80 insertions(+)

diff --git a/configure b/configure
index 6099be1..cdc4f46 100755
--- a/configure
+++ b/configure
@@ -4325,6 +4325,25 @@ if compile_prog "" "" ; then
inotify1=yes
fi

+# check if utimensat and futimens are supported
+utimens=no
+cat > $TMPC << EOF
+#define _ATFILE_SOURCE
+#include <stddef.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+int main(void)
+{
+ utimensat(AT_FDCWD, "foo", NULL, 0);
+ futimens(0, NULL);
+ return 0;
+}
+EOF
+if compile_prog "" "" ; then
+ utimens=yes
+fi
+
# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
@@ -6840,6 +6859,9 @@ if test "$curses" = "yes" ; then
echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
fi
+if test "$utimens" = "yes" ; then
+ echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
+fi
if test "$pipe2" = "yes" ; then
echo "CONFIG_PIPE2=y" >> $config_host_mak
fi
diff --git a/include/sysemu/os-posix.h b/include/sysemu/os-posix.h
index 629c8c6..900bdcb 100644
--- a/include/sysemu/os-posix.h
+++ b/include/sysemu/os-posix.h
@@ -51,6 +51,17 @@ int os_mlock(void);
typedef struct timeval qemu_timeval;
#define qemu_gettimeofday(tp) gettimeofday(tp, NULL)

+#ifndef CONFIG_UTIMENSAT
+#ifndef UTIME_NOW
+# define UTIME_NOW ((1l << 30) - 1l)
+#endif
+#ifndef UTIME_OMIT
+# define UTIME_OMIT ((1l << 30) - 2l)
+#endif
+#endif
+typedef struct timespec qemu_timespec;
+int qemu_utimens(const char *path, const qemu_timespec *times);
+
bool is_daemonized(void);

/**
diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index 5a291cc..eb57405 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -304,6 +304,53 @@ int qemu_pipe(int pipefd[2])
return ret;
}

+int qemu_utimens(const char *path, const struct timespec *times)
+{
+ struct timeval tv[2], tv_now;
+ struct stat st;
+ int i;
+#ifdef CONFIG_UTIMENSAT
+ int ret;
+
+ ret = utimensat(AT_FDCWD, path, times, AT_SYMLINK_NOFOLLOW);
+ if (ret != -1 || errno != ENOSYS) {
+ return ret;
+ }
+#endif
+ /* Fallback: use utimes() instead of utimensat() */
+
+ /* happy if special cases */
+ if (times[0].tv_nsec == UTIME_OMIT && times[1].tv_nsec == UTIME_OMIT) {
+ return 0;
+ }
+ if (times[0].tv_nsec == UTIME_NOW && times[1].tv_nsec == UTIME_NOW) {
+ return utimes(path, NULL);
+ }
+
+ /* prepare for hard cases */
+ if (times[0].tv_nsec == UTIME_NOW || times[1].tv_nsec == UTIME_NOW) {
+ gettimeofday(&tv_now, NULL);
+ }
+ if (times[0].tv_nsec == UTIME_OMIT || times[1].tv_nsec == UTIME_OMIT) {
+ stat(path, &st);
+ }
+
+ for (i = 0; i < 2; i++) {
+ if (times[i].tv_nsec == UTIME_NOW) {
+ tv[i].tv_sec = tv_now.tv_sec;
+ tv[i].tv_usec = tv_now.tv_usec;
+ } else if (times[i].tv_nsec == UTIME_OMIT) {
+ tv[i].tv_sec = (i == 0) ? st.st_atime : st.st_mtime;
+ tv[i].tv_usec = 0;
+ } else {
+ tv[i].tv_sec = times[i].tv_sec;
+ tv[i].tv_usec = times[i].tv_nsec / 1000;
+ }
+ }
+
+ return utimes(path, &tv[0]);
+}
+
char *
qemu_get_local_state_pathname(const char *relative_pathname)
{
--
1.8.3-rc3

2 changes: 2 additions & 0 deletions rpm/qemu-usermode.spec
Expand Up @@ -34,6 +34,8 @@ Patch12: 0013-crypto-check-if-getrandom-is-available-properly.patch
Patch13: 0014-Revert-tcg-Add-INDEX_op_dupm_vec.patch
# fix openat syscall (breaks e.g. bc build)
Patch14: 0015-qemu-usermode-make-sure-mode-is-passed-to-openat-if-.patch
# make sure utimensat from glibc is being used (see sb2 fixes above)
Patch15: 0016-Revert-util-drop-old-utimensat-compat-code.patch

BuildRequires: pkgconfig(ext2fs)
BuildRequires: pkgconfig(glib-2.0)
Expand Down

0 comments on commit c90ac8d

Please sign in to comment.