setpriv: do not process remaining args
authorPatrick Steinhardt <ps@pks.im>
Sun, 2 Jul 2017 13:42:50 +0000 (15:42 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Jul 2017 17:20:58 +0000 (19:20 +0200)
By default, the 'getopt32' call will continue parsing the command line
even after hitting a non-option string. But in setpriv, this should be
avoided, as all parameters following the initial non-option argument are
in fact arguments to the binary that is to be executed by setpriv.
Otherwise, calling e.g. 'busybox setpriv ls -l' would result in an error
due to the unknown parameter "-l".

Fix the issue by passing "+" as the first character in the options
string. This will cause 'getopt32' to stop processing after hitting the
first non-option.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
util-linux/setpriv.c

index 6bd663bf42d76134f4d2caee7c13f8976f58f2a9..686ad45d5fdc1f90d20fd18261964f10459188bc 100644 (file)
@@ -62,7 +62,8 @@ int setpriv_main(int argc UNUSED_PARAM, char **argv)
 
        opt_complementary = "-1";
        applet_long_options = setpriv_longopts;
-       opts = getopt32(argv, "");
+       opts = getopt32(argv, "+");
+
        if (opts) {
                if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0))
                        bb_simple_perror_msg_and_die("prctl: NO_NEW_PRIVS");