From a494b2492c039ab957abbf74398e0642c72787c0 Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Wed, 6 Jun 2018 18:30:56 +0100 Subject: [PATCH] Fix alignment when parsing Netlink messages The Netlink header should be treated as NLA_HDRLEN in length, and NLA_ALIGN() used to deal with padding after attributes. --- mqtt-arp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mqtt-arp.c b/mqtt-arp.c index 19da330..ba977b4 100644 --- a/mqtt-arp.c +++ b/mqtt-arp.c @@ -197,15 +197,15 @@ void main_loop(struct ma_config *config, struct mosquitto *mosq, int sock) nd->ndm_type); } attr = (struct nlattr *) (nd + 1); - while (attr->nla_len > 0) { - data = (((uint8_t *) attr) + 4); + while (((uint8_t *) attr - buf) < hdr->nlmsg_len) { + data = (((uint8_t *) attr) + NLA_HDRLEN); if (attr->nla_type == NDA_LLADDR && nd->ndm_state == NUD_REACHABLE) { mqtt_mac_presence(config, mosq, data, true); } - attr = (struct nlattr *) - (((uint8_t *) attr) + attr->nla_len); + attr = (struct nlattr *) (((uint8_t *) attr) + + NLA_ALIGN(attr->nla_len)); } break; case RTM_DELNEIGH: -- 2.39.2