summaryrefslogtreecommitdiff
path: root/package/busybox/busybox-1.10.1-ssd.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/busybox-1.10.1-ssd.patch')
-rw-r--r--package/busybox/busybox-1.10.1-ssd.patch187
1 files changed, 0 insertions, 187 deletions
diff --git a/package/busybox/busybox-1.10.1-ssd.patch b/package/busybox/busybox-1.10.1-ssd.patch
deleted file mode 100644
index 156ce1b65..000000000
--- a/package/busybox/busybox-1.10.1-ssd.patch
+++ /dev/null
@@ -1,187 +0,0 @@
---- busybox-1.10.1/debianutils/start_stop_daemon.c Sat Apr 19 05:50:30 2008
-+++ busybox-1.10.1-ssd/debianutils/start_stop_daemon.c Tue Apr 22 03:13:13 2008
-@@ -11,7 +11,6 @@
- /* NB: we have a problem here with /proc/NN/exe usage, similar to
- * one fixed in killall/pidof */
-
--#include <getopt.h>
- #include <sys/resource.h>
-
- /* Override ENABLE_FEATURE_PIDFILE */
-@@ -33,6 +32,7 @@
- int user_id;
- smallint quiet;
- smallint signal_nr;
-+ struct stat execstat;
- };
- #define G (*(struct globals*)&bb_common_bufsiz1)
- #define found (G.found )
-@@ -43,6 +43,7 @@
- #define user_id (G.user_id )
- #define quiet (G.quiet )
- #define signal_nr (G.signal_nr )
-+#define execstat (G.execstat )
- #define INIT_G() \
- do { \
- user_id = -1; \
-@@ -50,25 +51,21 @@
- } while (0)
-
-
--static int pid_is_exec(pid_t pid, const char *name)
-+static int pid_is_exec(pid_t pid)
- {
-+ struct stat st;
- char buf[sizeof("/proc//exe") + sizeof(int)*3];
-- char *execbuf;
-- int n;
-
- sprintf(buf, "/proc/%u/exe", pid);
-- n = strlen(name) + 1;
-- execbuf = xzalloc(n + 1);
-- readlink(buf, execbuf, n);
-- /* if readlink fails because link target is longer than strlen(name),
-- * execbuf still contains "", and strcmp will return !0. */
-- n = strcmp(execbuf, name);
-- if (ENABLE_FEATURE_CLEAN_UP)
-- free(execbuf);
-- return !n; /* nonzero (true) if execbuf == name */
-+ if (stat(buf, &st) < 0)
-+ return 0;
-+ if (st.st_dev == execstat.st_dev
-+ && st.st_ino == execstat.st_ino)
-+ return 1;
-+ return 0;
- }
-
--static int pid_is_user(int pid, int uid)
-+static int pid_is_user(int pid)
- {
- struct stat sb;
- char buf[sizeof("/proc/") + sizeof(int)*3];
-@@ -76,42 +73,39 @@
- sprintf(buf, "/proc/%u", pid);
- if (stat(buf, &sb) != 0)
- return 0;
-- return (sb.st_uid == uid);
-+ return (sb.st_uid == user_id);
- }
-
--static int pid_is_cmd(pid_t pid, const char *name)
-+static int pid_is_cmd(pid_t pid)
- {
-- char fname[sizeof("/proc//stat") + sizeof(int)*3];
-- char *buf;
-- int r = 0;
-+ char buf[256]; /* is it big enough? */
-+ char *p, *pe;
-
-- sprintf(fname, "/proc/%u/stat", pid);
-- buf = xmalloc_open_read_close(fname, NULL);
-- if (buf) {
-- char *p = strchr(buf, '(');
-- if (p) {
-- char *pe = strrchr(++p, ')');
-- if (pe) {
-- *pe = '\0';
-- r = !strcmp(p, name);
-- }
-- }
-- free(buf);
-- }
-- return r;
-+ sprintf(buf, "/proc/%u/stat", pid);
-+ if (open_read_close(buf, buf, sizeof(buf) - 1) < 0)
-+ return 0;
-+ buf[sizeof(buf) - 1] = '\0'; /* paranoia */
-+ p = strchr(buf, '(');
-+ if (!p)
-+ return 0;
-+ pe = strrchr(++p, ')');
-+ if (!pe)
-+ return 0;
-+ *pe = '\0';
-+ return !strcmp(p, cmdname);
- }
-
- static void check(int pid)
- {
- struct pid_list *p;
-
-- if (execname && !pid_is_exec(pid, execname)) {
-+ if (execname && !pid_is_exec(pid)) {
- return;
- }
-- if (userspec && !pid_is_user(pid, user_id)) {
-+ if (userspec && !pid_is_user(pid)) {
- return;
- }
-- if (cmdname && !pid_is_cmd(pid, cmdname)) {
-+ if (cmdname && !pid_is_cmd(pid)) {
- return;
- }
- p = xmalloc(sizeof(*p));
-@@ -148,9 +142,16 @@
- procdir = xopendir("/proc");
-
- pid = 0;
-- while ((entry = readdir(procdir)) != NULL) {
-+ while(1) {
-+ errno = 0; /* clear any previous error */
-+ entry = readdir(procdir);
-+// TODO: check for exact errno(s) which mean that we got stale entry
-+ if (errno) /* Stale entry, process has died after opendir */
-+ continue;
-+ if (!entry) /* EOF, no more entries */
-+ break;
- pid = bb_strtou(entry->d_name, NULL, 10);
-- if (errno)
-+ if (errno) /* NaN */
- continue;
- check(pid);
- }
-@@ -165,8 +166,6 @@
- struct pid_list *p;
- int killed = 0;
-
-- do_procinit();
--
- if (cmdname) {
- if (ENABLE_FEATURE_CLEAN_UP) what = xstrdup(cmdname);
- if (!ENABLE_FEATURE_CLEAN_UP) what = cmdname;
-@@ -251,7 +250,7 @@
- };
-
- int start_stop_daemon_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
--int start_stop_daemon_main(int argc, char **argv)
-+int start_stop_daemon_main(int argc ATTRIBUTE_UNUSED, char **argv)
- {
- unsigned opt;
- char *signame;
-@@ -293,7 +292,7 @@
- // if (retry_arg)
- // retries = xatoi_u(retry_arg);
- // )
-- argc -= optind;
-+ //argc -= optind;
- argv += optind;
-
- if (userspec) {
-@@ -301,13 +300,15 @@
- if (errno)
- user_id = xuname2uid(userspec);
- }
-+ if (execname)
-+ xstat(execname, &execstat);
-
-+ do_procinit(); /* Both start and stop needs to know current processes */
-+
- if (opt & CTX_STOP) {
- int i = do_stop();
- return (opt & OPT_OKNODO) ? 0 : (i <= 0);
- }
--
-- do_procinit();
-
- if (found) {
- if (!quiet)