summaryrefslogtreecommitdiff
path: root/src/platform/nm-linux-platform.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/nm-linux-platform.c')
-rw-r--r--src/platform/nm-linux-platform.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 6c8d3fd77d..a920980596 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -2527,13 +2527,23 @@ link_get_address (NMPlatform *platform, int ifindex, size_t *length)
{
auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
struct nl_addr *nladdr;
-
- nladdr = rtnllink ? rtnl_link_get_addr (rtnllink) : NULL;
+ size_t l = 0;
+ gconstpointer a = NULL;
+
+ if (rtnllink &&
+ (nladdr = rtnl_link_get_addr (rtnllink))) {
+ l = nl_addr_get_len (nladdr);
+ if (l > NM_UTILS_HWADDR_LEN_MAX) {
+ if (length)
+ *length = 0;
+ g_return_val_if_reached (NULL);
+ } else if (l > 0)
+ a = nl_addr_get_binary_addr (nladdr);
+ }
if (length)
- *length = nladdr ? nl_addr_get_len (nladdr) : 0;
-
- return nladdr ? nl_addr_get_binary_addr (nladdr) : NULL;
+ *length = l;
+ return a;
}
static gboolean