mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-14 08:35:15 +00:00
util: virnetlink: Add wrapper for 'nlmsg_alloc_simple'
The function is used in many places and fails only on allocation failures. Since trying to recover from allocation failure of a small buffer by reporting error doesn't make sense add a wrapper for 'nlmsg_alloc_simple' which will 'abort()' on failure and replace all allocations of netlink message with the new helper. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Laine Stump <laine@redhat.com>
This commit is contained in:
parent
bbc25f0d03
commit
7a0b625ea2
@ -1596,11 +1596,7 @@ virNetDevSetVfConfig(const char *ifname, int vf,
|
|||||||
if (!macaddr && vlanid < 0)
|
if (!macaddr && vlanid < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(RTM_SETLINK, NLM_F_REQUEST);
|
nl_msg = virNetlinkMsgNew(RTM_SETLINK, NLM_F_REQUEST);
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nlmsg_append(nl_msg, &ifinfo, sizeof(ifinfo), NLMSG_ALIGNTO) < 0)
|
if (nlmsg_append(nl_msg, &ifinfo, sizeof(ifinfo), NLMSG_ALIGNTO) < 0)
|
||||||
goto buffer_too_small;
|
goto buffer_too_small;
|
||||||
@ -3132,11 +3128,7 @@ virNetDevGetFamilyId(const char *family_name,
|
|||||||
unsigned int recvbuflen;
|
unsigned int recvbuflen;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
if (!(nl_msg = nlmsg_alloc_simple(GENL_ID_CTRL,
|
nl_msg = virNetlinkMsgNew(GENL_ID_CTRL, NLM_F_REQUEST | NLM_F_ACK);
|
||||||
NLM_F_REQUEST | NLM_F_ACK))) {
|
|
||||||
virReportOOMError();
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nlmsg_append(nl_msg, &gmsgh, sizeof(gmsgh), NLMSG_ALIGNTO) < 0)
|
if (nlmsg_append(nl_msg, &gmsgh, sizeof(gmsgh), NLMSG_ALIGNTO) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -3220,11 +3212,7 @@ virNetDevSwitchdevFeature(const char *ifname,
|
|||||||
if ((rv = virNetDevGetFamilyId(DEVLINK_GENL_NAME, &family_id)) <= 0)
|
if ((rv = virNetDevGetFamilyId(DEVLINK_GENL_NAME, &family_id)) <= 0)
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
if (!(nl_msg = nlmsg_alloc_simple(family_id,
|
nl_msg = virNetlinkMsgNew(family_id, NLM_F_REQUEST | NLM_F_ACK);
|
||||||
NLM_F_REQUEST | NLM_F_ACK))) {
|
|
||||||
virReportOOMError();
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nlmsg_append(nl_msg, &gmsgh, sizeof(gmsgh), NLMSG_ALIGNTO) < 0)
|
if (nlmsg_append(nl_msg, &gmsgh, sizeof(gmsgh), NLMSG_ALIGNTO) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -1036,13 +1036,9 @@ virNetDevBridgeFDBAddDel(const virMacAddr *mac, const char *ifname,
|
|||||||
if (!(ndm.ndm_state & (NUD_PERMANENT | NUD_REACHABLE)))
|
if (!(ndm.ndm_state & (NUD_PERMANENT | NUD_REACHABLE)))
|
||||||
ndm.ndm_state |= NUD_PERMANENT;
|
ndm.ndm_state |= NUD_PERMANENT;
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(isAdd ? RTM_NEWNEIGH : RTM_DELNEIGH,
|
nl_msg = virNetlinkMsgNew(isAdd ? RTM_NEWNEIGH : RTM_DELNEIGH,
|
||||||
NLM_F_REQUEST |
|
NLM_F_REQUEST |
|
||||||
(isAdd ? (NLM_F_CREATE | NLM_F_EXCL) : 0));
|
(isAdd ? (NLM_F_CREATE | NLM_F_EXCL) : 0));
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nlmsg_append(nl_msg, &ndm, sizeof(ndm), NLMSG_ALIGNTO) < 0)
|
if (nlmsg_append(nl_msg, &ndm, sizeof(ndm), NLMSG_ALIGNTO) < 0)
|
||||||
goto buffer_too_small;
|
goto buffer_too_small;
|
||||||
|
@ -107,11 +107,8 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
|
|||||||
if ((ifindex = if_nametoindex(ifname)) == 0)
|
if ((ifindex = if_nametoindex(ifname)) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!(nlmsg = nlmsg_alloc_simple(messageType,
|
nlmsg = virNetlinkMsgNew(messageType,
|
||||||
NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL))) {
|
NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL);
|
||||||
virReportOOMError();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&ifa, 0, sizeof(ifa));
|
memset(&ifa, 0, sizeof(ifa));
|
||||||
|
|
||||||
@ -323,12 +320,8 @@ virNetDevIPRouteAdd(const char *ifname,
|
|||||||
if ((ifindex = if_nametoindex(ifname)) == 0)
|
if ((ifindex = if_nametoindex(ifname)) == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!(nlmsg = nlmsg_alloc_simple(RTM_NEWROUTE,
|
nlmsg = virNetlinkMsgNew(RTM_NEWROUTE,
|
||||||
NLM_F_REQUEST | NLM_F_CREATE |
|
NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL);
|
||||||
NLM_F_EXCL))) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&rtmsg, 0, sizeof(rtmsg));
|
memset(&rtmsg, 0, sizeof(rtmsg));
|
||||||
|
|
||||||
|
@ -689,11 +689,7 @@ virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex,
|
|||||||
? virUUIDFormat(hostUUID, hostUUIDStr)
|
? virUUIDFormat(hostUUID, hostUUIDStr)
|
||||||
: "(unspecified)"));
|
: "(unspecified)"));
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(RTM_SETLINK, NLM_F_REQUEST);
|
nl_msg = virNetlinkMsgNew(RTM_SETLINK, NLM_F_REQUEST);
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nlmsg_append(nl_msg, &ifinfo, sizeof(ifinfo), NLMSG_ALIGNTO) < 0)
|
if (nlmsg_append(nl_msg, &ifinfo, sizeof(ifinfo), NLMSG_ALIGNTO) < 0)
|
||||||
goto buffer_too_small;
|
goto buffer_too_small;
|
||||||
|
@ -133,6 +133,18 @@ static virNetlinkHandle *placeholder_nlhandle;
|
|||||||
|
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
|
|
||||||
|
struct nl_msg *
|
||||||
|
virNetlinkMsgNew(int nlmsgtype,
|
||||||
|
int nlmsgflags)
|
||||||
|
{
|
||||||
|
struct nl_msg *ret;
|
||||||
|
|
||||||
|
if (!(ret = nlmsg_alloc_simple(nlmsgtype, nlmsgflags)))
|
||||||
|
abort();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virNetlinkStartup:
|
* virNetlinkStartup:
|
||||||
*
|
*
|
||||||
@ -511,11 +523,7 @@ virNetlinkDumpLink(const char *ifname, int ifindex,
|
|||||||
|
|
||||||
ifinfo.ifi_index = ifindex;
|
ifinfo.ifi_index = ifindex;
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(RTM_GETLINK, NLM_F_REQUEST);
|
nl_msg = virNetlinkMsgNew(RTM_GETLINK, NLM_F_REQUEST);
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
NETLINK_MSG_APPEND(nl_msg, sizeof(ifinfo), &ifinfo);
|
NETLINK_MSG_APPEND(nl_msg, sizeof(ifinfo), &ifinfo);
|
||||||
|
|
||||||
@ -595,12 +603,8 @@ virNetlinkNewLink(const char *ifname,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(RTM_NEWLINK,
|
nl_msg = virNetlinkMsgNew(RTM_NEWLINK,
|
||||||
NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL);
|
NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL);
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
NETLINK_MSG_APPEND(nl_msg, sizeof(ifinfo), &ifinfo);
|
NETLINK_MSG_APPEND(nl_msg, sizeof(ifinfo), &ifinfo);
|
||||||
|
|
||||||
@ -684,11 +688,7 @@ virNetlinkDelLink(const char *ifname, virNetlinkTalkFallback fallback)
|
|||||||
unsigned int resp_len = 0;
|
unsigned int resp_len = 0;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(RTM_DELLINK, NLM_F_REQUEST);
|
nl_msg = virNetlinkMsgNew(RTM_DELLINK, NLM_F_REQUEST);
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
NETLINK_MSG_APPEND(nl_msg, sizeof(ifinfo), &ifinfo);
|
NETLINK_MSG_APPEND(nl_msg, sizeof(ifinfo), &ifinfo);
|
||||||
|
|
||||||
@ -738,11 +738,7 @@ virNetlinkGetNeighbor(void **nlData, uint32_t src_pid, uint32_t dst_pid)
|
|||||||
unsigned int resp_len = 0;
|
unsigned int resp_len = 0;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
nl_msg = nlmsg_alloc_simple(RTM_GETNEIGH, NLM_F_DUMP | NLM_F_REQUEST);
|
nl_msg = virNetlinkMsgNew(RTM_GETNEIGH, NLM_F_DUMP | NLM_F_REQUEST);
|
||||||
if (!nl_msg) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
NETLINK_MSG_APPEND(nl_msg, sizeof(ndinfo), &ndinfo);
|
NETLINK_MSG_APPEND(nl_msg, sizeof(ndinfo), &ndinfo);
|
||||||
|
|
||||||
|
@ -29,6 +29,10 @@
|
|||||||
typedef struct nl_msg virNetlinkMsg;
|
typedef struct nl_msg virNetlinkMsg;
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetlinkMsg, nlmsg_free);
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetlinkMsg, nlmsg_free);
|
||||||
|
|
||||||
|
struct nl_msg *
|
||||||
|
virNetlinkMsgNew(int nlmsgtype,
|
||||||
|
int nlmsgflags);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct nl_msg;
|
struct nl_msg;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user