Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH][RFC] pseudo: intercept syscall() and return ENOTSUP for renameat2
@ 2018-03-27 15:48 Ross Burton
  2018-03-27 15:53 ` Seebs
                   ` (3 more replies)
  0 siblings, 4 replies; 19+ messages in thread
From: Ross Burton @ 2018-03-27 15:48 UTC (permalink / raw)
  To: openembedded-core

coreutils is now using renameat2() in mv(1) but as this syscall isn't in most
glibc headers yet it falls back to directly calling syscall(), which pseudo
doesn't intercept.  This results in permission problems as files mysteriously
move without pseudo knowing.

This patch intercepts syscall() and returns ENOTSUP if renameat2() is being
called.  Thanks to Andre McCurdy for the proof-of-concept that this patch is
based on.

Signed-off-by: Ross Burton <ross.burton@intel.com>
---
 meta/recipes-devtools/pseudo/files/renameat2.patch | 63 ++++++++++++++++++++++
 meta/recipes-devtools/pseudo/pseudo_git.bb         |  1 +
 2 files changed, 64 insertions(+)
 create mode 100644 meta/recipes-devtools/pseudo/files/renameat2.patch

diff --git a/meta/recipes-devtools/pseudo/files/renameat2.patch b/meta/recipes-devtools/pseudo/files/renameat2.patch
new file mode 100644
index 00000000000..467b0b3e79f
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/renameat2.patch
@@ -0,0 +1,63 @@
+commit 3a4c536817dce4d0cbaa8f4efe30e722108357dd
+Author: Ross Burton <ross.burton@intel.com>
+Date:   Tue Mar 27 14:02:10 2018 +0100
+
+    HACK syscall
+
+diff --git a/ports/linux/guts/syscall.c b/ports/linux/guts/syscall.c
+new file mode 100644
+index 0000000..4ed38ed
+--- /dev/null
++++ b/ports/linux/guts/syscall.c
+@@ -0,0 +1,30 @@
++/*
++ * Copyright (c) 2018 Wind River Systems; see
++ * guts/COPYRIGHT for information.
++ *
++ * long syscall(long number, ...)
++ *	long rc = -1;
++ */
++	typedef long syscall_arg_t;
++	syscall_arg_t a,b,c,d,e,f;
++
++	//va_start (ap, number);
++	a = va_arg (ap, syscall_arg_t);
++	b = va_arg (ap, syscall_arg_t);
++	c = va_arg (ap, syscall_arg_t);
++	d = va_arg (ap, syscall_arg_t);
++	e = va_arg (ap, syscall_arg_t);
++	f = va_arg (ap, syscall_arg_t);
++	va_end (ap);
++
++	if ((number == SYS_renameat2)) {
++			errno = ENOTSUP;
++			rc = -1;
++	}
++	else {
++			rc = real_syscall (number, a, b, c, d, e, f);
++	}
++
++/*	return rc;
++ * }
++ */
+diff --git a/ports/linux/wrapfuncs.in b/ports/linux/wrapfuncs.in
+index fca5b50..137612c 100644
+--- a/ports/linux/wrapfuncs.in
++++ b/ports/linux/wrapfuncs.in
+@@ -54,3 +54,4 @@ int getpw(uid_t uid, char *buf);
+ int getpwent_r(struct passwd *pwbuf, char *buf, size_t buflen, struct passwd **pwbufp);
+ int getgrent_r(struct group *gbuf, char *buf, size_t buflen, struct group **gbufp);
+ int capset(cap_user_header_t hdrp, const cap_user_data_t datap); /* real_func=pseudo_capset */
++long syscall(long number, ...);
+diff --git a/pseudo_wrappers.c b/pseudo_wrappers.c
+index e05f73a..b7225d7 100644
+--- a/pseudo_wrappers.c
++++ b/pseudo_wrappers.c
+@@ -36,6 +36,7 @@
+ #include <sys/time.h>
+ #include <sys/wait.h>
+ #include <dlfcn.h>
++#include <sys/syscall.h>
+ 
+ /* include this to get PSEUDO_PORT_* definitions */
+ #include "pseudo.h"
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb b/meta/recipes-devtools/pseudo/pseudo_git.bb
index 66da1cc53b8..44343c3bc57 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -6,6 +6,7 @@ SRC_URI = "git://git.yoctoproject.org/pseudo \
            file://fallback-group \
            file://moreretries.patch \
            file://toomanyfiles.patch \
+           file://renameat2.patch \
            "
 
 SRCREV = "d7c31a25e4b02af0c64e6be0b4b0a9ac4ffc9da2"
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2018-04-05  0:29 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-27 15:48 [PATCH][RFC] pseudo: intercept syscall() and return ENOTSUP for renameat2 Ross Burton
2018-03-27 15:53 ` Seebs
2018-03-27 16:02 ` ✗ patchtest: failure for " Patchwork
2018-03-27 22:43 ` [PATCH][RFC] " Andre McCurdy
2018-03-28  9:15   ` Burton, Ross
2018-03-31  4:15     ` Andre McCurdy
2018-03-31  5:06       ` Seebs
2018-03-31  6:02         ` Andre McCurdy
2018-03-31 15:35           ` Seebs
2018-03-31 15:58             ` Bruce Ashfield
2018-03-31 13:12         ` Richard Purdie
2018-03-31 15:39           ` Seebs
2018-03-31 21:03           ` Joshua Watt
2018-03-31 21:16             ` Seebs
2018-04-02 22:20           ` Richard Purdie
2018-04-04 21:28 ` Khem Raj
2018-04-04 21:45   ` Seebs
2018-04-05  0:29     ` Khem Raj
2018-04-04 21:51   ` Andre McCurdy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox