From 49be0d420444a51c26d8e81814a1aa4506c1c165 Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Sun, 22 Jul 2007 12:43:32 +0200 Subject: [PATCH] --- yaml --- r: 66239 b: refs/heads/master c: 744b096e2b0976a10ae9a66aa6a3ae7fa4fce9f1 h: refs/heads/master i: 66237: 443407d32bab8d7bb4955dc0c452a265583daa35 66235: c0986f53df6cecda4a5e49a88a3b1068b86d8231 66231: 47baf1d3053981fb731cc772e80c5fdc7bc80220 66223: b99beedbe9d116f5b2e9223084e501a4c2634ed4 66207: 09752840430675624f0936d28429772dd8e83901 66175: 8d1061e2b339ca306a5fc124a5a87458119321a0 v: v3 --- [refs] | 2 +- trunk/net/wireless/wext.c | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index 34571dea2fa9..e6cece886f03 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1bec3f1a3ec5d922d1040c7845b82cd496c02d90 +refs/heads/master: 744b096e2b0976a10ae9a66aa6a3ae7fa4fce9f1 diff --git a/trunk/net/wireless/wext.c b/trunk/net/wireless/wext.c index d6aaf65192e9..debf5191a128 100644 --- a/trunk/net/wireless/wext.c +++ b/trunk/net/wireless/wext.c @@ -1129,10 +1129,12 @@ static int rtnetlink_fill_iwinfo(struct sk_buff *skb, struct net_device *dev, { struct ifinfomsg *r; struct nlmsghdr *nlh; - unsigned char *b = skb_tail_pointer(skb); - nlh = NLMSG_PUT(skb, 0, 0, type, sizeof(*r)); - r = NLMSG_DATA(nlh); + nlh = nlmsg_put(skb, 0, 0, type, sizeof(*r), 0); + if (nlh == NULL) + return -EMSGSIZE; + + r = nlmsg_data(nlh); r->ifi_family = AF_UNSPEC; r->__ifi_pad = 0; r->ifi_type = dev->type; @@ -1141,15 +1143,13 @@ static int rtnetlink_fill_iwinfo(struct sk_buff *skb, struct net_device *dev, r->ifi_change = 0; /* Wireless changes don't affect those flags */ /* Add the wireless events in the netlink packet */ - RTA_PUT(skb, IFLA_WIRELESS, event_len, event); + NLA_PUT(skb, IFLA_WIRELESS, event_len, event); - nlh->nlmsg_len = skb_tail_pointer(skb) - b; - return skb->len; + return nlmsg_end(skb, nlh); -nlmsg_failure: -rtattr_failure: - nlmsg_trim(skb, b); - return -1; +nla_put_failure: + nlmsg_cancel(skb, nlh); + return -EMSGSIZE; } /* ---------------------------------------------------------------- */ @@ -1162,17 +1162,19 @@ static int rtnetlink_fill_iwinfo(struct sk_buff *skb, struct net_device *dev, static void rtmsg_iwinfo(struct net_device *dev, char *event, int event_len) { struct sk_buff *skb; - int size = NLMSG_GOODSIZE; + int err; - skb = alloc_skb(size, GFP_ATOMIC); + skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); if (!skb) return; - if (rtnetlink_fill_iwinfo(skb, dev, RTM_NEWLINK, - event, event_len) < 0) { + err = rtnetlink_fill_iwinfo(skb, dev, RTM_NEWLINK, event, event_len); + if (err < 0) { + WARN_ON(err == -EMSGSIZE); kfree_skb(skb); return; } + NETLINK_CB(skb).dst_group = RTNLGRP_LINK; skb_queue_tail(&wireless_nlevent_queue, skb); tasklet_schedule(&wireless_nlevent_tasklet);