diff options
Diffstat (limited to 'main/busybox/0002-nsenter-fix-parsing-of-t-S-and-G-options.patch')
-rw-r--r-- | main/busybox/0002-nsenter-fix-parsing-of-t-S-and-G-options.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/main/busybox/0002-nsenter-fix-parsing-of-t-S-and-G-options.patch b/main/busybox/0002-nsenter-fix-parsing-of-t-S-and-G-options.patch new file mode 100644 index 0000000000..7a81bba14c --- /dev/null +++ b/main/busybox/0002-nsenter-fix-parsing-of-t-S-and-G-options.patch @@ -0,0 +1,61 @@ +From 254e47372f77ea1070be6dbb44b5c45770115a07 Mon Sep 17 00:00:00 2001 +From: Euan Harris <euan.harris@docker.com> +Date: Fri, 4 May 2018 16:18:47 +0100 +Subject: [PATCH 2/2] nsenter: fix parsing of -t, -S and -G options + +-t, -S and -G each take mandatory integer arguments. getopt32long()'s +option string syntax for this type of argument is 'c:+', however nsenter's +opt_str uses 'c+', which specifies two options 'c' and '+' which do not +take arguments. This means that giving a target PID causes nsenter to +exit and print the usage string: + + # nsenter -t1 sh + nsenter: unrecognized option: 1 + BusyBox v1.27.2 (2017-12-12 10:41:50 GMT) multi-call binary. + ... + +The long form options are also broken: + + # nsenter --setuid=1000 --setgid=1000 sh + BusyBox v1.29.0.git (2018-05-04 13:56:49 UTC) multi-call binary. + ... + +`nsenter --target=<pid> sh` parses correctly and appears to work, but +<pid> is ignored and set to 0. This doesn't raise an error unless one +of the namespace arguments is also given: + + # ./busybox_unstripped nsenter --target=42 sh + # exit + + # ./busybox_unstripped nsenter -n --target=42 sh + BusyBox v1.29.0.git (2018-05-04 13:56:49 UTC) multi-call binary. + ... + +This has caused problems in a couple of places: + + https://github.com/linuxkit/linuxkit/issues/567 + https://github.com/gliderlabs/docker-alpine/issues/359 + https://github.com/kontena/pharos-cluster/pull/81 + +Signed-off-by: Euan Harris <euan.harris@docker.com> +Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> +--- + util-linux/nsenter.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util-linux/nsenter.c b/util-linux/nsenter.c +index 35439a2..ae8103a 100644 +--- a/util-linux/nsenter.c ++++ b/util-linux/nsenter.c +@@ -105,7 +105,7 @@ static const struct namespace_descr ns_list[] = { + /* + * Upstream nsenter doesn't support the short option for --preserve-credentials + */ +-static const char opt_str[] ALIGN1 = "U::i::u::n::p::m::""t+S+G+r::w::F"; ++static const char opt_str[] ALIGN1 = "U::i::u::n::p::m::""t:+S:+G:+r::w::F"; + + #if ENABLE_LONG_OPTS + static const char nsenter_longopts[] ALIGN1 = +-- +2.7.4 + |