]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Fix netlink payload length calculation
authorJouni Malinen <jouni.malinen@atheros.com>
Fri, 18 Dec 2009 14:14:54 +0000 (16:14 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 18 Dec 2009 14:14:54 +0000 (16:14 +0200)
nlmsghdr length needs to be removed from payload length. [Bug 341]

src/drivers/driver_atheros.c
src/drivers/driver_hostap.c
src/drivers/driver_madwifi.c
src/drivers/driver_nl80211.c
src/drivers/driver_ralink.c
src/drivers/driver_wext.c
src/drivers/priv_netlink.h

index 7f5f9308d68a3cae22380da2a3596854dc4427d0..8603f34a5575210618b4e6ae0c70d9f6b48934e2 100644 (file)
@@ -952,7 +952,7 @@ madwifi_wireless_event_rtm_newlink(struct madwifi_driver_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
index c781bb9e8b564c2e24c1fbcc4954dae83a043c70..173c8008159cec8fa0fbb1ee121785b88d194361 100644 (file)
@@ -922,7 +922,7 @@ static void hostapd_wireless_event_rtm_newlink(struct hostap_driver_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
index f1c14743d0b26264f30c45a66148461646d274ef..b06eaf8291df8a592d0bc161a90b193fff4022b4 100644 (file)
@@ -1022,7 +1022,7 @@ madwifi_wireless_event_rtm_newlink(struct madwifi_driver_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
index 1f5e21c166a6de00a431a8c281ca402f4cb4b642..0c12109629d7fdfc9063c06facdffa78c3fae18a 100644 (file)
@@ -425,7 +425,7 @@ static int wpa_driver_nl80211_own_ifname(struct wpa_driver_nl80211_data *drv,
 
        _nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - _nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return 0;
 
@@ -504,7 +504,7 @@ static void wpa_driver_nl80211_event_rtm_newlink(struct wpa_driver_nl80211_data
 
        _nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - _nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
@@ -538,7 +538,7 @@ static void wpa_driver_nl80211_event_rtm_dellink(struct wpa_driver_nl80211_data
 
        _nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - _nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
index 431d38fd8aa29b8db0d7866c2db08057a9c4e65e..e1f13914f565dc72aad0da07cc205ed9be8872e6 100644 (file)
@@ -764,7 +764,7 @@ wpa_driver_ralink_event_rtm_newlink(struct wpa_driver_ralink_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        wpa_printf(MSG_DEBUG, "attrlen=%d", attrlen);
        if (attrlen < 0)
                return;
index 9d6a48d4d259934190a100d2f0c56187b7f1ba80..e3652d96d31ffff6734e2945080198a39299c065 100644 (file)
@@ -637,7 +637,7 @@ static int wpa_driver_wext_own_ifname(struct wpa_driver_wext_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return 0;
 
@@ -716,7 +716,7 @@ static void wpa_driver_wext_event_rtm_newlink(struct wpa_driver_wext_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
@@ -753,7 +753,7 @@ static void wpa_driver_wext_event_rtm_dellink(struct wpa_driver_wext_data *drv,
 
        nlmsg_len = NLMSG_ALIGN(sizeof(struct ifinfomsg));
 
-       attrlen = h->nlmsg_len - nlmsg_len;
+       attrlen = NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg));
        if (attrlen < 0)
                return;
 
index 2a31e251a0138cc47413b2b73c7cd3e2ad556aee..0ab0bb27550768d4862e86409552c3b833062eb9 100644 (file)
 
 #define NLMSG_ALIGNTO 4
 #define NLMSG_ALIGN(len) (((len) + NLMSG_ALIGNTO - 1) & ~(NLMSG_ALIGNTO - 1))
+#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
 #define NLMSG_LENGTH(len) ((len) + NLMSG_ALIGN(sizeof(struct nlmsghdr)))
+#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
 #define NLMSG_DATA(nlh) ((void*) (((char*) nlh) + NLMSG_LENGTH(0)))
+#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
 
 #define RTA_ALIGNTO 4
 #define RTA_ALIGN(len) (((len) + RTA_ALIGNTO - 1) & ~(RTA_ALIGNTO - 1))