From: Jonathan McDowell Date: Wed, 6 Jun 2018 17:30:56 +0000 (+0100) Subject: Fix alignment when parsing Netlink messages X-Git-Url: https://the.earth.li/gitweb/?a=commitdiff_plain;h=a494b2492c039ab957abbf74398e0642c72787c0;p=mqtt-arp.git 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. --- 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: