]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
qtnfmac: replace qtnf_cmd_acl_data_size() with struct_size()
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Wed, 3 Apr 2019 17:02:36 +0000 (12:02 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 4 Apr 2019 16:38:36 +0000 (19:38 +0300)
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    struct boo entry[];
};

size = sizeof(struct foo) + count * sizeof(struct boo);
instance = kzalloc(size, GFP_KERNEL)

Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:

size = struct_size(instance, entry, count);

or

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL)

Based on the above, replace qtnf_cmd_acl_data_size() with the
new struct_size() helper.

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Reviewed-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/quantenna/qtnfmac/commands.c

index e58495403dde70522ba59da83bde6aa7556327b5..22313a46c3ae9ae7a7322df4afb2b51aab4db0ea 100644 (file)
@@ -183,14 +183,6 @@ static void qtnf_cmd_tlv_ie_set_add(struct sk_buff *cmd_skb, u8 frame_type,
                memcpy(tlv->ie_data, buf, len);
 }
 
-static inline size_t qtnf_cmd_acl_data_size(const struct cfg80211_acl_data *acl)
-{
-       size_t size = sizeof(struct qlink_acl_data) +
-                     acl->n_acl_entries * sizeof(struct qlink_mac_address);
-
-       return size;
-}
-
 static bool qtnf_cmd_start_ap_can_fit(const struct qtnf_vif *vif,
                                      const struct cfg80211_ap_settings *s)
 {
@@ -209,7 +201,7 @@ static bool qtnf_cmd_start_ap_can_fit(const struct qtnf_vif *vif,
 
        if (s->acl)
                len += sizeof(struct qlink_tlv_hdr) +
-                      qtnf_cmd_acl_data_size(s->acl);
+                      struct_size(s->acl, mac_addrs, s->acl->n_acl_entries);
 
        if (len > (sizeof(struct qlink_cmd) + QTNF_MAX_CMD_BUF_SIZE)) {
                pr_err("VIF%u.%u: can not fit AP settings: %u\n",
@@ -316,7 +308,8 @@ int qtnf_cmd_send_start_ap(struct qtnf_vif *vif,
        }
 
        if (s->acl) {
-               size_t acl_size = qtnf_cmd_acl_data_size(s->acl);
+               size_t acl_size = struct_size(s->acl, mac_addrs,
+                                             s->acl->n_acl_entries);
                struct qlink_tlv_hdr *tlv =
                        skb_put(cmd_skb, sizeof(*tlv) + acl_size);
 
@@ -2594,7 +2587,7 @@ int qtnf_cmd_set_mac_acl(const struct qtnf_vif *vif,
        struct qtnf_bus *bus = vif->mac->bus;
        struct sk_buff *cmd_skb;
        struct qlink_tlv_hdr *tlv;
-       size_t acl_size = qtnf_cmd_acl_data_size(params);
+       size_t acl_size = struct_size(params, mac_addrs, params->n_acl_entries);
        int ret;
 
        cmd_skb = qtnf_cmd_alloc_new_cmdskb(vif->mac->macid, vif->vifid,