summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-03-13 21:32:05 (GMT)
committerDenys Vlasenko <vda.linux@googlemail.com>2017-03-13 21:35:30 (GMT)
commit018804204f41e6e60cec536843275f8fdd4d3620 (patch)
tree8d1adfc3acba1cbfb24e952e12f1a329a3a15a21
parente88608eae24ae5934034e1ecb6c494fefbf1b9ae (diff)
downloadbusybox-018804204f41e6e60cec536843275f8fdd4d3620.zip
busybox-018804204f41e6e60cec536843275f8fdd4d3620.tar.gz
busybox-018804204f41e6e60cec536843275f8fdd4d3620.tar.bz2
runit: fix chpst -n -N -u USER
busybox's chpst first switches user/group and then tries to call nice(). Once the root priviledges are dropped, process priority can only be lowered. So negative nice values don't work anymore. Upstream version of chpst correctly calls nice() before switching user. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--runit/chpst.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/runit/chpst.c b/runit/chpst.c
index 846c846..ee3a331 100644
--- a/runit/chpst.c
+++ b/runit/chpst.c
@@ -463,6 +463,13 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
xchroot(root);
}
+ /* nice should be done before xsetuid */
+ if (opt & OPT_n) {
+ errno = 0;
+ if (nice(xatoi(nicestr)) == -1)
+ bb_perror_msg_and_die("nice");
+ }
+
if (opt & OPT_u) {
if (setgroups(1, &ugid.gid) == -1)
bb_perror_msg_and_die("setgroups");
@@ -470,12 +477,6 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
xsetuid(ugid.uid);
}
- if (opt & OPT_n) {
- errno = 0;
- if (nice(xatoi(nicestr)) == -1)
- bb_perror_msg_and_die("nice");
- }
-
if (opt & OPT_0)
close(STDIN_FILENO);
if (opt & OPT_1)