netstat: Fix invalid free()

This commit is contained in:
Sebastian Huber 2014-09-18 13:01:25 +02:00
parent 8babd8c8ea
commit 705d1bf8d2

View File

@ -55,12 +55,10 @@ __FBSDID("$FreeBSD$");
/* print bpf stats */ /* print bpf stats */
#ifndef __rtems__
static char * static char *
bpf_pidname(pid_t pid) bpf_pidname(pid_t pid)
{ {
#ifdef __rtems__
return "rtems";
#else /* __rtems__ */
struct kinfo_proc newkp; struct kinfo_proc newkp;
int error, mib[4]; int error, mib[4];
size_t size; size_t size;
@ -76,8 +74,8 @@ bpf_pidname(pid_t pid)
return (strdup("??????")); return (strdup("??????"));
} }
return (strdup(newkp.ki_comm)); return (strdup(newkp.ki_comm));
#endif /* __rtems__ */
} }
#endif /* __rtems__ */
static void static void
bpf_flags(struct xbpf_d *bd, char *flagbuf) bpf_flags(struct xbpf_d *bd, char *flagbuf)
@ -139,12 +137,18 @@ bpf_stats(char *ifname)
if (ifname && strcmp(ifname, d->bd_ifname) != 0) if (ifname && strcmp(ifname, d->bd_ifname) != 0)
continue; continue;
bpf_flags(d, flagbuf); bpf_flags(d, flagbuf);
#ifndef __rtems__
pname = bpf_pidname(d->bd_pid); pname = bpf_pidname(d->bd_pid);
#else /* __rtems__ */
pname = "??????";
#endif /* __rtems__ */
(void) printf("%5d %6s %7s %9ju %9ju %9ju %5d %5d %s\n", (void) printf("%5d %6s %7s %9ju %9ju %9ju %5d %5d %s\n",
d->bd_pid, d->bd_ifname, flagbuf, d->bd_pid, d->bd_ifname, flagbuf,
d->bd_rcount, d->bd_dcount, d->bd_fcount, d->bd_rcount, d->bd_dcount, d->bd_fcount,
d->bd_slen, d->bd_hlen, pname); d->bd_slen, d->bd_hlen, pname);
#ifndef __rtems__
free(pname); free(pname);
#endif /* __rtems__ */
} }
free(bd); free(bd);
} }