Merge wireless into wireless-next
[linux-2.6-block.git] / net / wireless / nl80211.c
index 1886f78d9c3ce0a638340289440e519cdf9c67f2..3c0bca4238d357c01b6fe92bb0f2b2b8a2917725 100644 (file)
@@ -9163,6 +9163,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
        struct wiphy *wiphy;
        int err, tmp, n_ssids = 0, n_channels, i;
        size_t ie_len, size;
+       size_t ssids_offset, ie_offset;
 
        wiphy = &rdev->wiphy;
 
@@ -9208,21 +9209,20 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
                return -EINVAL;
 
        size = struct_size(request, channels, n_channels);
+       ssids_offset = size;
        size = size_add(size, array_size(sizeof(*request->ssids), n_ssids));
+       ie_offset = size;
        size = size_add(size, ie_len);
        request = kzalloc(size, GFP_KERNEL);
        if (!request)
                return -ENOMEM;
+       request->n_channels = n_channels;
 
        if (n_ssids)
-               request->ssids = (void *)&request->channels[n_channels];
+               request->ssids = (void *)request + ssids_offset;
        request->n_ssids = n_ssids;
-       if (ie_len) {
-               if (n_ssids)
-                       request->ie = (void *)(request->ssids + n_ssids);
-               else
-                       request->ie = (void *)(request->channels + n_channels);
-       }
+       if (ie_len)
+               request->ie = (void *)request + ie_offset;
 
        i = 0;
        if (scan_freqs) {