ASoC: qdsp6: q6core: Use struct_size() in kmemdup()
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Thu, 23 May 2019 16:07:48 +0000 (11:07 -0500)
committerMark Brown <broonie@kernel.org>
Fri, 24 May 2019 12:01:57 +0000 (13:01 +0100)
Make use of the struct_size() helper instead of an open-coded version
in order to avoid any potential type mistakes, in particular in the
context in which this code is being used.

So, replace code of the following form:

sizeof(*fwk) + fwk->num_services * sizeof(fwk->svc_api_info[0]);

with:

struct_size(fwk, svc_api_info, fwk->num_services)

and so on...

Notice that variables bytes and len are unnecessary, hence they are
removed.

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/qdsp6/q6core.c

index cdfc8ab..ae314a6 100644 (file)
@@ -98,13 +98,13 @@ static int q6core_callback(struct apr_device *adev, struct apr_resp_pkt *data)
        }
        case AVCS_CMDRSP_GET_FWK_VERSION: {
                struct avcs_cmdrsp_get_fwk_version *fwk;
-               int bytes;
 
                fwk = data->payload;
-               bytes = sizeof(*fwk) + fwk->num_services *
-                               sizeof(fwk->svc_api_info[0]);
 
-               core->fwk_version = kmemdup(data->payload, bytes, GFP_ATOMIC);
+               core->fwk_version = kmemdup(data->payload,
+                                           struct_size(fwk, svc_api_info,
+                                                       fwk->num_services),
+                                           GFP_ATOMIC);
                if (!core->fwk_version)
                        return -ENOMEM;
 
@@ -115,13 +115,13 @@ static int q6core_callback(struct apr_device *adev, struct apr_resp_pkt *data)
        }
        case AVCS_GET_VERSIONS_RSP: {
                struct avcs_cmdrsp_get_version *v;
-               int len;
 
                v = data->payload;
 
-               len = sizeof(*v) + v->num_services * sizeof(v->svc_api_info[0]);
-
-               core->svc_version = kmemdup(data->payload, len, GFP_ATOMIC);
+               core->svc_version = kmemdup(data->payload,
+                                           struct_size(v, svc_api_info,
+                                                       v->num_services),
+                                           GFP_ATOMIC);
                if (!core->svc_version)
                        return -ENOMEM;