From: Laine Stump Date: Tue, 24 Feb 2015 18:17:24 +0000 (-0500) Subject: util: check for null ifname inside virNetDevBandwidthSet() X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=153b06c6d14f00e9f63e25712b34f3f918f41dff;p=people%2Fliuw%2Flibxenctrl-split%2Flibvirt.git util: check for null ifname inside virNetDevBandwidthSet() Previously this function relied on having ATTRIBUTE_NONNULL(1) in its prototype rather than explicitly checking for a null ifname. Unfortunately, ATTRIBUTE_NONNULL is just a hint to the optimizer and code analyzers like Coverity, it doesn't actually check anything at execution time, so the result was possible warnings from Coverity, along with the possibility of null dereferences when ifname wasn't available. This patch removes the ATTRIBUTE_NONNULL from the prototype, and checks ifname inside the function, logging an error if it's NULL (once we've determined that the user really is trying to set a bandwidth). --- diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c index c8a90c852..8041d5269 100644 --- a/src/util/virnetdevbandwidth.c +++ b/src/util/virnetdevbandwidth.c @@ -83,6 +83,13 @@ virNetDevBandwidthSet(const char *ifname, return -1; } + if (!ifname) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("Unable to set bandwidth for interface because " + "device name is unknown")); + return -1; + } + virNetDevBandwidthClear(ifname); if (bandwidth->in && bandwidth->in->average) { diff --git a/src/util/virnetdevbandwidth.h b/src/util/virnetdevbandwidth.h index de289dbe0..efcf95af5 100644 --- a/src/util/virnetdevbandwidth.h +++ b/src/util/virnetdevbandwidth.h @@ -46,7 +46,7 @@ void virNetDevBandwidthFree(virNetDevBandwidthPtr def); int virNetDevBandwidthSet(const char *ifname, virNetDevBandwidthPtr bandwidth, bool hierarchical_class) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; + ATTRIBUTE_RETURN_CHECK; int virNetDevBandwidthClear(const char *ifname); int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest, const virNetDevBandwidth *src)