problem with start-stop-daemon and --exec
Denys Vlasenko
vda.linux at googlemail.com
Mon Mar 5 15:33:31 UTC 2012
On Mon, Mar 5, 2012 at 4:25 PM, Ed W <lists at wildgooses.com> wrote:
>> But there is a reason why we check /proc/pid/cmdline instead.
>> On systems with bbox, a lot of processes will have
>> /proc/pid/exe = "/bin/busybox".
>> Which will make e.g.
>> start-stop-daemon --stop --exec /bin/ntpd
>> fail to stop ntpd if ntpd is a busybox applet.
>
> I examined the code for openrc and I can't find any obvious reference to
> /proc/pid/exe ? I confess I don't understand the implementation they are
> using, but I think the relevant code is in src/librc/librc-daemon.c if
> someone else could take a closer look?
http://sources.gentoo.org/cgi-bin/viewvc.cgi/baselayout/trunk/src/librc-daemon.c?view=markup&pathrev=2966
45 snprintf (cmdline, sizeof (cmdline), "/proc/%u/exe", pid);
46 memset (buffer, 0, sizeof (buffer));
47 if (readlink (cmdline, buffer, sizeof (buffer)) != -1) {
48 if (strcmp (exec, buffer) == 0)
49 return (true);
Heh...
66 r = read(fd, buffer, sizeof (buffer));
67 close (fd);
68
69 if (r == -1)
70 return 0;
71
72 buffer[r] = 0;
^^^^^^^^^^^^^^^^^^^^^^^^^^ buffer overflow
> Can we please consider simply relaxing the current test to be a substring
> match on /proc/pid/cmdline (only in the case of both --exec AND --pidfile)?
> This seems to
> a) be a small code change and completely compatible with current situation
> b) still a very tight test and unlikely to lead to false positives
> c) handles common situations where a daemon renames itself
I don't fully understand. Can you show a patch?
So far I committed this:
http://git.busybox.net/busybox/commit/?id=17eedcad9406c43beddab3906c8c693626c351fb
--
vda
More information about the busybox
mailing list