ASoC: cs-amp-lib: Replace offsetof() with struct_size()
authorThorsten Blum <thorsten.blum@linux.dev>
Mon, 14 Apr 2025 11:45:28 +0000 (13:45 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 14 Apr 2025 15:08:04 +0000 (16:08 +0100)
Use struct_size() to calculate the number of bytes to allocate and used
by 'cirrus_amp_efi_data'. Compared to offsetof(), struct_size() provides
additional compile-time checks (e.g., __must_be_array()).

Reviewed-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Link: https://patch.msgid.link/20250414114528.355204-2-thorsten.blum@linux.dev
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs-amp-lib-test.c
sound/soc/codecs/cs-amp-lib.c

index 45626f99a4175e7c0725943643e2bbd1b317eae9..d96d46eb5372e8028665e70a5e4061218dd8fa5e 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/gpio/driver.h>
 #include <linux/list.h>
 #include <linux/module.h>
+#include <linux/overflow.h>
 #include <linux/platform_device.h>
 #include <linux/random.h>
 #include <sound/cs-amp-lib.h>
@@ -40,8 +41,7 @@ static void cs_amp_lib_test_init_dummy_cal_blob(struct kunit *test, int num_amps
        unsigned int blob_size;
        int i;
 
-       blob_size = offsetof(struct cirrus_amp_efi_data, data) +
-                   sizeof(struct cirrus_amp_cal_data) * num_amps;
+       blob_size = struct_size(priv->cal_blob, data, num_amps);
 
        priv->cal_blob = kunit_kzalloc(test, blob_size, GFP_KERNEL);
        KUNIT_ASSERT_NOT_NULL(test, priv->cal_blob);
index c677868c5d5f7ba171d56bf28336a3c2e96211b4..808e67c90f7c72fc5ae0a27f0507b56d86d6f8dc 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/efi.h>
 #include <linux/firmware/cirrus/cs_dsp.h>
 #include <linux/module.h>
+#include <linux/overflow.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <sound/cs-amp-lib.h>
@@ -147,7 +148,7 @@ static struct cirrus_amp_efi_data *cs_amp_get_cal_efi_buffer(struct device *dev)
        dev_dbg(dev, "Calibration: Size=%d, Amp Count=%d\n", efi_data->size, efi_data->count);
 
        if ((efi_data->count > 128) ||
-           offsetof(struct cirrus_amp_efi_data, data[efi_data->count]) > data_size) {
+           struct_size(efi_data, data, efi_data->count) > data_size) {
                dev_err(dev, "EFI cal variable truncated\n");
                ret = -EOVERFLOW;
                goto err;