From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by mail.openembedded.org (Postfix) with ESMTP id 863656003C for ; Tue, 27 Mar 2018 15:48:05 +0000 (UTC) Received: by mail-wm0-f65.google.com with SMTP id a20so21921381wmd.1 for ; Tue, 27 Mar 2018 08:48:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id; bh=VPp9RZnSlCC1PLFZ8j5jTpml65F0yxRbGip+wmsLikY=; b=Ku6ACyXmUOa6OV7xO0KhB9u1rfvWp9I/eX4Iq9fzu/zP8TFsi3bLcr1pqg1B++NNzD 0nbnKF+io1PTN69HIeAN4vXZArjkHacWxULwueaU7VqQkOuk32Th5LTPgX0lwZE5ZvlD areTIKOhb+JSXE1NjuSriMQhgLLGtev/7VvXIw/qg2n+7SWWPn8Ag77oDyS/XWqkxYK1 oKSmZ2gfoHZHCelJHVHiRQDj1pUJQm9MzJ+D/dr3p63IYztkAfjUjK30b7tRMbxoDWiC L/uc1HEhrCPBPIXnjqrz/3KX0RlFfYF/Gk2IWHovEQCDDxMAOIyLE8NNDgsPPNxbMGKw IhaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=VPp9RZnSlCC1PLFZ8j5jTpml65F0yxRbGip+wmsLikY=; b=aKttflK/ZloCPvFjY+QDMfnqcBr/JMwhk6WzGpR79+snytTZmOmW2quBQeWkURhYRm ZkOJq/+36JKHAjl0B1uzgz1j6Xz3R7K+o9zt6408f1pegYmedfcbBdHKVA3oEbEJmfZV 73/tMeiGLdd5N0K8VVccmH+jhXaaEgvFBUaD7TQFaJCsIPhRItwHiKg148ZvNaqzKRom C8qp7noLmrWZBmw1NF90XADoZOAtojxg6hLgsIVnA7NlVYkAEWk6dJY+uLaRJSHfYKMb GAXRstSNa4KYSFgS+mHlDTKNsVpCV3mD4xmDPUihtS5/ctwaCpda0zRWwuZYEqy8L/IK 1o8Q== X-Gm-Message-State: AElRT7Gfx/XLRA2692h61tSltT6gKZJQiS20HffDtcRfd73JGoLc7a09 Sxg/Y8In0QLQscM/cAMsmlGJplTs X-Google-Smtp-Source: AG47ELvpz3MBYDOqOv30Nr7K1zd24DHpz6A/TzS6SQhFRNFDDqYxTKwzjoddnjC/z2g5Ldzj7cjF2g== X-Received: by 10.28.193.13 with SMTP id r13mr17380546wmf.38.1522165685795; Tue, 27 Mar 2018 08:48:05 -0700 (PDT) Received: from flashheart.burtonini.com (35.106.2.81.in-addr.arpa. [81.2.106.35]) by smtp.gmail.com with ESMTPSA id b9sm1571519wrc.85.2018.03.27.08.48.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Mar 2018 08:48:04 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Date: Tue, 27 Mar 2018 16:48:02 +0100 Message-Id: <20180327154802.14611-1-ross.burton@intel.com> X-Mailer: git-send-email 2.11.0 Subject: [PATCH][RFC] pseudo: intercept syscall() and return ENOTSUP for renameat2 X-BeenThere: openembedded-core@lists.openembedded.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Patches and discussions about the oe-core layer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Mar 2018 15:48:05 -0000 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 --- 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 +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 + #include + #include ++#include + + /* 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