提交 153b06c6 编写于 作者: L Laine Stump

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).
上级 118b2408
...@@ -83,6 +83,13 @@ virNetDevBandwidthSet(const char *ifname, ...@@ -83,6 +83,13 @@ virNetDevBandwidthSet(const char *ifname,
return -1; 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); virNetDevBandwidthClear(ifname);
if (bandwidth->in && bandwidth->in->average) { if (bandwidth->in && bandwidth->in->average) {
......
...@@ -46,7 +46,7 @@ void virNetDevBandwidthFree(virNetDevBandwidthPtr def); ...@@ -46,7 +46,7 @@ void virNetDevBandwidthFree(virNetDevBandwidthPtr def);
int virNetDevBandwidthSet(const char *ifname, int virNetDevBandwidthSet(const char *ifname,
virNetDevBandwidthPtr bandwidth, virNetDevBandwidthPtr bandwidth,
bool hierarchical_class) bool hierarchical_class)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_RETURN_CHECK;
int virNetDevBandwidthClear(const char *ifname); int virNetDevBandwidthClear(const char *ifname);
int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest, int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest,
const virNetDevBandwidth *src) const virNetDevBandwidth *src)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册