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;
 
                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) {