--- sysvinit-2.86/src/killall5.c.orig 2004-12-26 23:07:15.505343096 +0100 +++ sysvinit-2.86/src/killall5.c 2004-12-26 23:20:43.017582576 +0100 @@ -193,6 +193,7 @@ if (p->argv0) free(p->argv0); if (p->argv1) free(p->argv1); if (p->pathname) free(p->pathname); + if (p->statname) free(p->statname); free(p); } plist = NULL; @@ -210,7 +211,7 @@ /* Open the status file. */ snprintf(path, sizeof(path), "/proc/%s/stat", d->d_name); - /* Read SID & statname from it. */ + /* Read statname from it. */ if ((fp = fopen(path, "r")) != NULL) { buf[0] = 0; fgets(buf, sizeof(buf), fp); @@ -223,11 +224,11 @@ /* Read program name. */ q = strrchr(buf, ')'); if (q == NULL) { - p->sid = 0; nsyslog(LOG_ERR, "can't get program name from %s\n", path); free(p); + fclose(fp); continue; } s++; @@ -242,20 +243,23 @@ /* Get session, startcode, endcode. */ startcode = endcode = 0; - if (sscanf(q, "%*c %*d %*d %d %*d %*d %*u %*u " + if (sscanf(q, "%*c %*d %*d %*d %*d %*d %*u %*u " "%*u %*u %*u %*u %*u %*d %*d " "%*d %*d %*d %*d %*u %*u %*d " "%*u %lu %lu", - &p->sid, &startcode, &endcode) != 3) { + &startcode, &endcode) == 2) { + if (startcode == 0 && endcode == 0) + p->kernel = 1; + } + fclose(fp); + p->sid = getsid(pid); + if (p->sid < 0) { p->sid = 0; - nsyslog(LOG_ERR, "can't read sid from %s\n", - path); + nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid); + free(p->statname); free(p); continue; } - if (startcode == 0 && endcode == 0) - p->kernel = 1; - fclose(fp); } else { /* Process disappeared.. */ free(p);