diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-05-22 06:40:57 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-05-22 06:40:57 +0100 |
commit | 5fa12b17bc5b0b725faf9141c22f3c995e0dd9d2 (patch) | |
tree | ca8504b079622030b9acae419e8587dafcfef121 | |
parent | 98ee48423ca62f8463adf8decc0914710f85f600 (diff) | |
download | xen-5fa12b17bc5b0b725faf9141c22f3c995e0dd9d2.tar.gz xen-5fa12b17bc5b0b725faf9141c22f3c995e0dd9d2.tar.bz2 xen-5fa12b17bc5b0b725faf9141c22f3c995e0dd9d2.zip |
xentop: fix NULL pointer dereference
On my system, I'm getting SIGSEGVs in xentop because
xenstat_node_domain() is returning NULL. Skip the loop if it does
rather than crashing.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen-unstable changeset: 21439:11a3bf0e568e
xen-unstable date: Thu May 20 14:10:07 2010 +0100
-rw-r--r-- | tools/xenstat/libxenstat/src/xenstat_linux.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/tools/xenstat/libxenstat/src/xenstat_linux.c b/tools/xenstat/libxenstat/src/xenstat_linux.c index c17423d3f3..1543fb21de 100644 --- a/tools/xenstat/libxenstat/src/xenstat_linux.c +++ b/tools/xenstat/libxenstat/src/xenstat_linux.c @@ -292,20 +292,22 @@ int xenstat_collect_networks(xenstat_node * node) /* If the device parsed is network bridge and both tx & rx packets are zero, we are most */ /* likely using bonding so we alter the configuration for dom0 to have bridge stats */ - if ((strstr(iface, devBridge) != NULL) && (strstr(iface, devNoBridge) == NULL)) { - domain = xenstat_node_domain(node, 0); + if ((strstr(iface, devBridge) != NULL) && + (strstr(iface, devNoBridge) == NULL) && + ((domain = xenstat_node_domain(node, 0)) != NULL)) { for (i = 0; i < domain->num_networks; i++) { - if ((domain->networks[i].id == 0) && (domain->networks[i].tbytes == 0) - && (domain->networks[i].rbytes == 0)) { - domain->networks[i].tbytes = txBytes; - domain->networks[i].tpackets = txPackets; - domain->networks[i].terrs = txErrs; - domain->networks[i].tdrop = txDrops; - domain->networks[i].rbytes = rxBytes; - domain->networks[i].rpackets = rxPackets; - domain->networks[i].rerrs = rxErrs; - domain->networks[i].rdrop = rxDrops; - } + if ((domain->networks[i].id != 0) || + (domain->networks[i].tbytes != 0) || + (domain->networks[i].rbytes != 0)) + continue; + domain->networks[i].tbytes = txBytes; + domain->networks[i].tpackets = txPackets; + domain->networks[i].terrs = txErrs; + domain->networks[i].tdrop = txDrops; + domain->networks[i].rbytes = rxBytes; + domain->networks[i].rpackets = rxPackets; + domain->networks[i].rerrs = rxErrs; + domain->networks[i].rdrop = rxDrops; } } else /* Otherwise we need to preserve old behaviour */ |