ath: dfs_pattern_detector: Avoid open coded arithmetic in memory allocation
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Mon, 27 Dec 2021 16:58:10 +0000 (17:58 +0100)
committerKalle Valo <quic_kvalo@quicinc.com>
Mon, 17 Jan 2022 12:41:51 +0000 (14:41 +0200)
kmalloc_array()/kcalloc() should be used to avoid potential overflow when
a multiplication is needed to compute the size of the requested memory.

kmalloc_array() can be used here instead of kcalloc() because the array is
fully initialized in the next 'for' loop.

Finally, 'cd->detectors' is defined as 'struct pri_detector **detectors;'.
So 'cd->detectors' and '*cd->detectors' are both some pointer.
So use a more logical 'sizeof(*cd->detectors)'.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/0fbcd32a0384ac1f87c5a3549e505e4becc60226.1640624216.git.christophe.jaillet@wanadoo.fr
drivers/net/wireless/ath/dfs_pattern_detector.c

index 75cb53a3ec15e7b615d83c800de6347353ebc9bd..27f4d74a41c8083cf0933fdaba60b06409ea1bab 100644 (file)
@@ -197,7 +197,7 @@ static void channel_detector_exit(struct dfs_pattern_detector *dpd,
 static struct channel_detector *
 channel_detector_create(struct dfs_pattern_detector *dpd, u16 freq)
 {
-       u32 sz, i;
+       u32 i;
        struct channel_detector *cd;
 
        cd = kmalloc(sizeof(*cd), GFP_ATOMIC);
@@ -206,8 +206,8 @@ channel_detector_create(struct dfs_pattern_detector *dpd, u16 freq)
 
        INIT_LIST_HEAD(&cd->head);
        cd->freq = freq;
-       sz = sizeof(cd->detectors) * dpd->num_radar_types;
-       cd->detectors = kzalloc(sz, GFP_ATOMIC);
+       cd->detectors = kmalloc_array(dpd->num_radar_types,
+                                     sizeof(*cd->detectors), GFP_ATOMIC);
        if (cd->detectors == NULL)
                goto fail;