]> git.pld-linux.org Git - packages/SysVinit.git/blob - sysvinit-killall5.patch
25d79fd3c0afd2e10c92139ed22a47d9b2e79635
[packages/SysVinit.git] / sysvinit-killall5.patch
1 diff -u sysvinit-2.88dsf/src/killall5.c sysvinit-2.88dsf/src/killall5.c
2 --- sysvinit-2.88dsf/src/killall5.c     2011-12-03 23:12:52.373139250 +0100
3 +++ sysvinit-2.88dsf/src/killall5.c     2011-12-03 23:19:21.498025134 +0100
4 @@ -479,6 +479,7 @@
5                 if (p->argv1) free(p->argv1);
6                 if (p->statname) free(p->statname);
7                 if (p->pathname) free(p->pathname);
8 +               if (p->statname) free(p->statname);
9                 free(p);
10         }
11         plist = NULL;
12 @@ -496,7 +497,7 @@
13                 /* Open the status file. */
14                 snprintf(path, sizeof(path), "%s/stat", d->d_name);
15  
16 -               /* Read SID & statname from it. */
17 +               /* Read statname from it. */
18                 if ((fp = fopen(path, "r")) != NULL) {
19                         buf[0] = 0;
20                         fgets(buf, sizeof(buf), fp);
21 @@ -509,7 +510,6 @@
22                                 /* Read program name. */
23                                 q = strrchr(buf, ')');
24                                 if (q == NULL) {
25 -                                       p->sid = 0;
26                                         nsyslog(LOG_ERR,
27                                         "can't get program name from /proc/%s\n",
28                                                 path);
29 @@ -517,6 +517,7 @@
30                                         if (p->argv1) free(p->argv1);
31                                         if (p->statname) free(p->statname);
32                                         free(p);
33 +                                       fclose(fp);
34                                         continue;
35                                 }
36                                 s++;
37 @@ -531,23 +532,26 @@
38  
39                         /* Get session, startcode, endcode. */
40                         startcode = endcode = 0;
41 -                       if (sscanf(q,   "%*c %*d %*d %d %*d %*d %*u %*u "
42 +                       if (sscanf(q,   "%*c %*d %*d %*d %*d %*d %*u %*u "
43                                         "%*u %*u %*u %*u %*u %*d %*d "
44                                         "%*d %*d %*d %*d %*u %*u %*d "
45                                         "%*u %lu %lu",
46 -                                       &p->sid, &startcode, &endcode) != 3) {
47 +                                       &startcode, &endcode) == 2) {
48 +                               if (startcode == 0 && endcode == 0)
49 +                                       p->kernel = 1;
50 +                       }
51 +                       fclose(fp);
52 +                       p->sid = getsid(pid);
53 +                       if (p->sid < 0) {
54                                 p->sid = 0;
55 -                               nsyslog(LOG_ERR, "can't read sid from %s\n",
56 -                                       path);
57 +                               nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid);
58 +                               free(p->statname);
59                                 if (p->argv0) free(p->argv0);
60                                 if (p->argv1) free(p->argv1);
61                                 if (p->statname) free(p->statname);
62                                 free(p);
63                                 continue;
64                         }
65 -                       if (startcode == 0 && endcode == 0)
66 -                               p->kernel = 1;
67 -                       fclose(fp);
68                 } else {
69                         /* Process disappeared.. */
70                         if (p->argv0) free(p->argv0);
This page took 0.040587 seconds and 2 git commands to generate.