]>
Commit | Line | Data |
---|---|---|
8c5b2406 AF |
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 @@ | |
612af2b6 | 5 | if (p->argv1) free(p->argv1); |
8c5b2406 | 6 | if (p->statname) free(p->statname); |
437bcd41 AM |
7 | if (p->pathname) free(p->pathname); |
8 | + if (p->statname) free(p->statname); | |
9 | free(p); | |
10 | } | |
11 | plist = NULL; | |
8c5b2406 | 12 | @@ -496,7 +497,7 @@ |
437bcd41 | 13 | /* Open the status file. */ |
8c5b2406 | 14 | snprintf(path, sizeof(path), "%s/stat", d->d_name); |
437bcd41 AM |
15 | |
16 | - /* Read SID & statname from it. */ | |
17 | + /* Read statname from it. */ | |
8c5b2406 | 18 | if ((fp = fopen(path, "r")) != NULL) { |
437bcd41 | 19 | buf[0] = 0; |
612af2b6 | 20 | fgets(buf, sizeof(buf), fp); |
8c5b2406 | 21 | @@ -509,7 +510,6 @@ |
437bcd41 AM |
22 | /* Read program name. */ |
23 | q = strrchr(buf, ')'); | |
24 | if (q == NULL) { | |
25 | - p->sid = 0; | |
26 | nsyslog(LOG_ERR, | |
8c5b2406 | 27 | "can't get program name from /proc/%s\n", |
437bcd41 | 28 | path); |
8c5b2406 AF |
29 | @@ -517,6 +517,7 @@ |
30 | if (p->argv1) free(p->argv1); | |
31 | if (p->statname) free(p->statname); | |
612af2b6 JB |
32 | free(p); |
33 | + fclose(fp); | |
34 | continue; | |
35 | } | |
36 | s++; | |
8c5b2406 | 37 | @@ -531,23 +532,26 @@ |
612af2b6 JB |
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; | |
437bcd41 AM |
55 | - nsyslog(LOG_ERR, "can't read sid from %s\n", |
56 | - path); | |
612af2b6 JB |
57 | + nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid); |
58 | + free(p->statname); | |
8c5b2406 AF |
59 | if (p->argv0) free(p->argv0); |
60 | if (p->argv1) free(p->argv1); | |
61 | if (p->statname) free(p->statname); | |
612af2b6 JB |
62 | free(p); |
63 | continue; | |
64 | } | |
65 | - if (startcode == 0 && endcode == 0) | |
66 | - p->kernel = 1; | |
67 | - fclose(fp); | |
437bcd41 AM |
68 | } else { |
69 | /* Process disappeared.. */ | |
8c5b2406 | 70 | if (p->argv0) free(p->argv0); |