commit:     b3fc94e26e94fdd3db193a8e77a4f0977d1591a4
Author:     Mikle Kolyada <zlogene <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 29 17:45:26 2018 +0000
Commit:     Mikle Kolyada <zlogene <AT> gentoo <DOT> org>
CommitDate: Sat Dec 29 17:45:47 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b3fc94e2

sys-apps/util-linux: fix set_arch detection for sparc

Signed-off-by: Mikle Kolyada <zlogene <AT> gentoo.org>
Package-Manager: Portage-2.3.51, Repoman-2.3.11

 .../files/util-linux-2.33-sparc-setarch.patch      | 80 ++++++++++++++++++++++
 sys-apps/util-linux/util-linux-2.33.ebuild         |  3 +-
 2 files changed, 82 insertions(+), 1 deletion(-)

diff --git a/sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch 
b/sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch
new file mode 100644
index 00000000000..cbae6c0f263
--- /dev/null
+++ b/sys-apps/util-linux/files/util-linux-2.33-sparc-setarch.patch
@@ -0,0 +1,80 @@
+From 3fa06e049012218d883d0e1251df86bafbc446bf Mon Sep 17 00:00:00 2001
+From: Karel Zak <[email protected]>
+Date: Thu, 22 Nov 2018 11:03:35 +0100
+Subject: [PATCH] setarch: fix obscure sparc32bash use-case
+
+Reported-by: Carlos Santos <[email protected]>
+Signed-off-by: Karel Zak <[email protected]>
+---
+ sys-utils/setarch.c | 28 ++++++++++++++++++----------
+ 1 file changed, 18 insertions(+), 10 deletions(-)
+
+diff --git a/sys-utils/setarch.c b/sys-utils/setarch.c
+index a733f7b3c..7c0a63fbb 100644
+--- a/sys-utils/setarch.c
++++ b/sys-utils/setarch.c
+@@ -268,6 +268,7 @@ int main(int argc, char *argv[])
+       int c;
+       struct arch_domain *doms, *target;
+       unsigned long pers_value = 0;
++      char *shell = NULL, *shell_arg = NULL;
+ 
+       /* Options without equivalent short options */
+       enum {
+@@ -310,14 +311,14 @@ int main(int argc, char *argv[])
+       archwrapper = strcmp(program_invocation_short_name, "setarch") != 0;
+       if (archwrapper) {
+               arch = program_invocation_short_name;   /* symlinks to setarch 
*/
+-#if defined(__sparc64__) || defined(__sparc__)
++
++              /* Don't use ifdef sparc here, we get "Unrecognized 
architecture"
++               * error message later if necessary */
+               if (strcmp(arch, "sparc32bash") == 0) {
+-                      if (set_arch(arch, 0L, 0))
+-                              err(EXIT_FAILURE, _("Failed to set personality 
to %s"), arch);
+-                      execl("/bin/bash", "", NULL);
+-                      errexec("/bin/bash");
++                      shell = "/bin/bash";
++                      shell_arg = "";
++                      goto set_arch;
+               }
+-#endif
+       } else {
+               if (1 < argc && *argv[1] != '-') {
+                       arch = argv[1];
+@@ -391,6 +392,7 @@ int main(int argc, char *argv[])
+       argc -= optind;
+       argv += optind;
+ 
++set_arch:
+       /* get execution domain (architecture) */
+       if (arch) {
+               doms = init_arch_domains();
+@@ -422,17 +424,23 @@ int main(int argc, char *argv[])
+       if (arch)
+               verify_arch_domain(target, arch);
+ 
++      if (!argc) {
++              shell = "/bin/sh";
++              shell_arg = "-sh";
++      }
+       if (verbose) {
+-              printf(_("Execute command `%s'.\n"), argc ? argv[0] : 
"/bin/sh");
++              printf(_("Execute command `%s'.\n"), shell ? shell : argv[0]);
+               /* flush all output streams before exec */
+               fflush(NULL);
+       }
+ 
+-      if (!argc) {
+-              execl("/bin/sh", "-sh", NULL);
+-              errexec("/bin/sh");
++      /* Execute shell */
++      if (shell) {
++              execl(shell, shell_arg, NULL);
++              errexec(shell);
+       }
+ 
++      /* Execute on command line specified command */
+       execvp(argv[0], argv);
+       errexec(argv[0]);
+ }

diff --git a/sys-apps/util-linux/util-linux-2.33.ebuild 
b/sys-apps/util-linux/util-linux-2.33.ebuild
index c95e045cc20..cf66f3c521b 100644
--- a/sys-apps/util-linux/util-linux-2.33.ebuild
+++ b/sys-apps/util-linux/util-linux-2.33.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2018 Gentoo Foundation and others
+# Copyright 1999-2018 Gentoo Authors and others
 # Copyright 2018 Sony Interactive Entertainment Inc.
 # Distributed under the terms of the GNU General Public License v2
 
@@ -65,6 +65,7 @@ S="${WORKDIR}/${MY_P}"
 
 PATCHES=(
        
"${FILESDIR}/util-linux-2.32.1-skip-oids-test-when-uuidgen-is-not-available.patch"
+       "${FILESDIR}/${P}-sparc-setarch.patch"
 )
 
 src_prepare() {

Reply via email to