linux/drivers/mfd
Kees Cook a86854d0c5 treewide: devm_kzalloc() -> devm_kcalloc()
The devm_kzalloc() function has a 2-factor argument form, devm_kcalloc().
This patch replaces cases of:

        devm_kzalloc(handle, a * b, gfp)

with:
        devm_kcalloc(handle, a * b, gfp)

as well as handling cases of:

        devm_kzalloc(handle, a * b * c, gfp)

with:

        devm_kzalloc(handle, array3_size(a, b, c), gfp)

as it's slightly less ugly than:

        devm_kcalloc(handle, array_size(a, b), c, gfp)

This does, however, attempt to ignore constant size factors like:

        devm_kzalloc(handle, 4 * 1024, gfp)

though any constants defined via macros get caught up in the conversion.

Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.

Some manual whitespace fixes were needed in this patch, as Coccinelle
really liked to write "=devm_kcalloc..." instead of "= devm_kcalloc...".

The Coccinelle script used for this was:

// Fix redundant parens around sizeof().
@@
expression HANDLE;
type TYPE;
expression THING, E;
@@

(
  devm_kzalloc(HANDLE,
-	(sizeof(TYPE)) * E
+	sizeof(TYPE) * E
  , ...)
|
  devm_kzalloc(HANDLE,
-	(sizeof(THING)) * E
+	sizeof(THING) * E
  , ...)
)

// Drop single-byte sizes and redundant parens.
@@
expression HANDLE;
expression COUNT;
typedef u8;
typedef __u8;
@@

(
  devm_kzalloc(HANDLE,
-	sizeof(u8) * (COUNT)
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(__u8) * (COUNT)
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(char) * (COUNT)
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(unsigned char) * (COUNT)
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(u8) * COUNT
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(__u8) * COUNT
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(char) * COUNT
+	COUNT
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(unsigned char) * COUNT
+	COUNT
  , ...)
)

// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
expression HANDLE;
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@

(
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(TYPE) * (COUNT_ID)
+	COUNT_ID, sizeof(TYPE)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(TYPE) * COUNT_ID
+	COUNT_ID, sizeof(TYPE)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(TYPE) * (COUNT_CONST)
+	COUNT_CONST, sizeof(TYPE)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(TYPE) * COUNT_CONST
+	COUNT_CONST, sizeof(TYPE)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(THING) * (COUNT_ID)
+	COUNT_ID, sizeof(THING)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(THING) * COUNT_ID
+	COUNT_ID, sizeof(THING)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(THING) * (COUNT_CONST)
+	COUNT_CONST, sizeof(THING)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(THING) * COUNT_CONST
+	COUNT_CONST, sizeof(THING)
  , ...)
)

// 2-factor product, only identifiers.
@@
expression HANDLE;
identifier SIZE, COUNT;
@@

- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	SIZE * COUNT
+	COUNT, SIZE
  , ...)

// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression HANDLE;
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@

(
  devm_kzalloc(HANDLE,
-	sizeof(TYPE) * (COUNT) * (STRIDE)
+	array3_size(COUNT, STRIDE, sizeof(TYPE))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(TYPE) * (COUNT) * STRIDE
+	array3_size(COUNT, STRIDE, sizeof(TYPE))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(TYPE) * COUNT * (STRIDE)
+	array3_size(COUNT, STRIDE, sizeof(TYPE))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(TYPE) * COUNT * STRIDE
+	array3_size(COUNT, STRIDE, sizeof(TYPE))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(THING) * (COUNT) * (STRIDE)
+	array3_size(COUNT, STRIDE, sizeof(THING))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(THING) * (COUNT) * STRIDE
+	array3_size(COUNT, STRIDE, sizeof(THING))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(THING) * COUNT * (STRIDE)
+	array3_size(COUNT, STRIDE, sizeof(THING))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(THING) * COUNT * STRIDE
+	array3_size(COUNT, STRIDE, sizeof(THING))
  , ...)
)

// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression HANDLE;
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@

(
  devm_kzalloc(HANDLE,
-	sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+	array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+	array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(THING1) * sizeof(THING2) * COUNT
+	array3_size(COUNT, sizeof(THING1), sizeof(THING2))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(THING1) * sizeof(THING2) * (COUNT)
+	array3_size(COUNT, sizeof(THING1), sizeof(THING2))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(TYPE1) * sizeof(THING2) * COUNT
+	array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
  , ...)
|
  devm_kzalloc(HANDLE,
-	sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+	array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
  , ...)
)

// 3-factor product, only identifiers, with redundant parens removed.
@@
expression HANDLE;
identifier STRIDE, SIZE, COUNT;
@@

(
  devm_kzalloc(HANDLE,
-	(COUNT) * STRIDE * SIZE
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	COUNT * (STRIDE) * SIZE
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	COUNT * STRIDE * (SIZE)
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	(COUNT) * (STRIDE) * SIZE
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	COUNT * (STRIDE) * (SIZE)
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	(COUNT) * STRIDE * (SIZE)
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	(COUNT) * (STRIDE) * (SIZE)
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
|
  devm_kzalloc(HANDLE,
-	COUNT * STRIDE * SIZE
+	array3_size(COUNT, STRIDE, SIZE)
  , ...)
)

// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression HANDLE;
expression E1, E2, E3;
constant C1, C2, C3;
@@

(
  devm_kzalloc(HANDLE, C1 * C2 * C3, ...)
|
  devm_kzalloc(HANDLE,
-	(E1) * E2 * E3
+	array3_size(E1, E2, E3)
  , ...)
|
  devm_kzalloc(HANDLE,
-	(E1) * (E2) * E3
+	array3_size(E1, E2, E3)
  , ...)
|
  devm_kzalloc(HANDLE,
-	(E1) * (E2) * (E3)
+	array3_size(E1, E2, E3)
  , ...)
|
  devm_kzalloc(HANDLE,
-	E1 * E2 * E3
+	array3_size(E1, E2, E3)
  , ...)
)

// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression HANDLE;
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@

(
  devm_kzalloc(HANDLE, sizeof(THING) * C2, ...)
|
  devm_kzalloc(HANDLE, sizeof(TYPE) * C2, ...)
|
  devm_kzalloc(HANDLE, C1 * C2 * C3, ...)
|
  devm_kzalloc(HANDLE, C1 * C2, ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(TYPE) * (E2)
+	E2, sizeof(TYPE)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(TYPE) * E2
+	E2, sizeof(TYPE)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(THING) * (E2)
+	E2, sizeof(THING)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	sizeof(THING) * E2
+	E2, sizeof(THING)
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	(E1) * E2
+	E1, E2
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	(E1) * (E2)
+	E1, E2
  , ...)
|
- devm_kzalloc
+ devm_kcalloc
  (HANDLE,
-	E1 * E2
+	E1, E2
  , ...)
)

Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-12 16:19:22 -07:00
..
88pm80x.c
88pm800.c
88pm805.c
88pm860x-core.c
88pm860x-i2c.c
Kconfig
Makefile Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices" 2018-05-16 09:21:48 +01:00
aat2870-core.c
ab3100-core.c
ab3100-otp.c
ab8500-core.c
ab8500-debugfs.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
ab8500-gpadc.c
ab8500-sysctrl.c
abx500-core.c mfd: abx500-core: Adjust 14 checks for null pointers 2018-05-16 09:21:48 +01:00
ac100.c
act8945a.c
adp5520.c
altera-a10sr.c
arizona-core.c mfd: arizona: Update reset pin to use GPIOD 2018-05-16 09:21:48 +01:00
arizona-i2c.c
arizona-irq.c
arizona-spi.c
arizona.h
as3711.c
as3722.c
asic3.c mfd: asic3: Fix broken MMC card detection 2018-06-04 08:44:17 +01:00
atmel-flexcom.c
atmel-hlcdc.c
atmel-smc.c mfd: syscon: atmel-smc: Include string.h 2018-05-29 09:09:29 +01:00
axp20x-i2c.c
axp20x-rsb.c
axp20x.c mfd: axp20x: Correct AXP806 POK interrupt prefix 2018-05-16 09:21:48 +01:00
bcm590xx.c
bd9571mwv.c mfd: bd9571mwv: Allow DDR Backup Power register access 2018-04-23 17:53:45 +01:00
cros_ec.c - New Device Support 2018-06-11 07:20:17 -07:00
cros_ec_dev.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
cros_ec_dev.h
cros_ec_i2c.c mfd: cros_ec_i2c: Moving the system sleep pm ops to late 2018-05-29 09:11:12 +01:00
cros_ec_spi.c mfd: cros_ec: Retry commands when EC is known to be busy 2018-05-23 06:59:00 +01:00
cs47l24-tables.c
cs5535-mfd.c
da903x.c
da9052-core.c
da9052-i2c.c
da9052-irq.c
da9052-spi.c
da9055-core.c
da9055-i2c.c
da9062-core.c mfd: da9062: Use core helper regmap_reg_range macros 2018-05-16 09:21:48 +01:00
da9063-core.c
da9063-i2c.c
da9063-irq.c
da9150-core.c
davinci_voicecodec.c
db8500-prcmu.c
dbx500-prcmu-regs.h
dln2.c
dm355evm_msp.c
exynos-lpass.c
ezx-pcap.c
fsl-imx25-tsadc.c
hi655x-pmic.c
hi6421-pmic-core.c
htc-i2cpld.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
htc-pasic3.c
intel-lpss-acpi.c
intel-lpss-pci.c mfd: intel-lpss: Fix Intel Cannon Lake LPSS I2C input clock 2018-06-04 08:44:17 +01:00
intel-lpss.c mfd: intel-lpss: Correct names of RESETS register bits 2018-06-04 06:48:22 +01:00
intel-lpss.h
intel_msic.c
intel_quark_i2c_gpio.c gpio: dwapb: Add support for 1 interrupt per port A GPIO 2018-05-16 14:35:24 +02:00
intel_soc_pmic_bxtwc.c
intel_soc_pmic_chtdc_ti.c
intel_soc_pmic_chtwc.c
intel_soc_pmic_core.c
intel_soc_pmic_core.h
intel_soc_pmic_crc.c
ipaq-micro.c
janz-cmodio.c mfd: janz-cmodio: Delete error message for a failed memory allocation 2018-05-16 09:21:48 +01:00
jz4740-adc.c mfd: jz4740-adc: Delete error message for a failed memory allocation 2018-05-16 09:21:48 +01:00
kempld-core.c
lm3533-core.c
lm3533-ctrlbank.c
lp873x.c
lp3943.c
lp8788-irq.c
lp8788.c
lp87565.c
lpc_ich.c
lpc_sch.c
max8907.c
max8925-core.c
max8925-i2c.c
max8997-irq.c
max8997.c mfd: max8997: Delete error message for a failed memory allocation 2018-05-16 09:21:48 +01:00
max8998-irq.c
max8998.c
max14577.c
max77620.c
max77686.c
max77693.c
max77843.c
mc13xxx-core.c hwmon: MC13783: Add uid and die temperature sensor inputs 2018-04-16 13:01:36 +01:00
mc13xxx-i2c.c
mc13xxx-spi.c
mc13xxx.h
mcp-core.c
mcp-sa11x0.c
menelaus.c
menf21bmc.c
mfd-core.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
motorola-cpcap.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
mt6397-core.c mfd: mt6397: Add PMIC keys support to MT6397 driver 2018-04-16 15:16:11 +01:00
mxs-lradc.c
omap-usb-host.c mfd: omap-usb-host: Use match_string() helper 2018-06-04 08:44:17 +01:00
omap-usb-tll.c mfd: omap-usb-tll: Allocate driver data at once 2018-05-16 09:21:48 +01:00
omap-usb.h
palmas.c
pcf50633-adc.c
pcf50633-core.c mfd: pcf50633: Fix some memory leaks in the error handling path of 'pcf50633_probe()' 2018-05-16 09:21:48 +01:00
pcf50633-gpio.c
pcf50633-irq.c
qcom-pm8xxx.c treewide: Use struct_size() for devm_kmalloc() and friends 2018-06-06 11:15:43 -07:00
qcom-spmi-pmic.c mfd: qcom-spmi-pmic: Add support for pm8005, pm8998 and pmi8998 2018-06-04 06:47:52 +01:00
qcom_rpm.c
rave-sp.c mfd: rave-sp: Remove VLA 2018-05-16 09:21:48 +01:00
rc5t583-irq.c
rc5t583.c mfd: rc5t583: Improve a size determination 2018-05-16 09:21:48 +01:00
rdc321x-southbridge.c
retu-mfd.c
rk808.c
rn5t618.c
rt5033.c
sec-core.c
sec-irq.c
si476x-cmd.c
si476x-i2c.c mfd: si476x-i2c: Delete an error message for a failed memory allocation in si476x_core_probe() 2018-05-16 09:21:48 +01:00
si476x-prop.c
sky81452.c
sm501.c mfd: sm501: Adjust 12 checks for null pointers 2018-05-16 09:21:48 +01:00
smsc-ece1099.c mfd: smsc-ece1099: Improve a size determination in smsc_i2c_probe() 2018-05-16 09:21:48 +01:00
sprd-sc27xx-spi.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
ssbi.c
sta2x11-mfd.c
stm32-lptimer.c
stm32-timers.c mfd: stm32-timers: Add support for DMAs 2018-05-16 09:10:38 +01:00
stmpe-i2c.c
stmpe-spi.c
stmpe.c
stmpe.h
stw481x.c
sun4i-gpadc.c
sun6i-prcm.c
syscon.c mfd: syscon: Set name of regmap_config 2018-05-16 09:21:48 +01:00
t7l66xb.c
tc3589x.c
tc6387xb.c
tc6393xb.c
ti-lmu.c
ti_am335x_tscadc.c mfd: ti_am335x_tscadc: Delete an error message for a failed memory allocation in ti_tscadc_probe() 2018-05-16 09:21:48 +01:00
timberdale.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
timberdale.h
tmio_core.c
tps6105x.c
tps6507x.c
tps6586x.c mfd: tps6586x: Delete an error message for a failed memory allocation in tps6586x_parse_dt() 2018-05-16 09:21:48 +01:00
tps65010.c
tps65086.c
tps65090.c mfd: tps65090: Delete an error message for a failed memory allocation in tps65090_i2c_probe() 2018-05-16 09:21:48 +01:00
tps65217.c
tps65218.c
tps65910.c mfd: tps65910: Move an assignment in tps65910_sleepinit() 2018-05-16 09:21:48 +01:00
tps65911-comparator.c mfd: tps65911-comparator: Fix an off by one bug 2018-05-16 09:21:48 +01:00
tps65912-core.c
tps65912-i2c.c
tps65912-spi.c
tps68470.c mfd: Update to SPDX license identifier 2018-05-16 09:21:48 +01:00
tps80031.c mfd: tps80031: Delete an error message for a failed memory allocation in tps80031_probe() 2018-05-16 09:21:48 +01:00
twl-core.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
twl-core.h
twl4030-audio.c
twl4030-irq.c
twl4030-power.c
twl6030-irq.c mfd: twl6030-irq: Delete an error message for a failed memory allocation in twl6030_init_irq() 2018-05-16 09:21:48 +01:00
twl6040.c
ucb1x00-assabet.c
ucb1x00-core.c
ucb1x00-ts.c
ucb1400_core.c
vexpress-sysreg.c
viperboard.c mfd: viperboard: Delete an error message for a failed memory allocation in vprbrd_probe() 2018-05-16 09:21:48 +01:00
vx855.c
wl1273-core.c
wm97xx-core.c mfd: wm97xx-core: Platform data can be NULL 2018-06-11 09:11:03 +01:00
wm831x-auxadc.c
wm831x-core.c
wm831x-i2c.c
wm831x-irq.c
wm831x-otp.c
wm831x-spi.c
wm5102-tables.c
wm5110-tables.c
wm8350-core.c
wm8350-gpio.c
wm8350-i2c.c
wm8350-irq.c
wm8350-regmap.c
wm8400-core.c
wm8994-core.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
wm8994-irq.c
wm8994-regmap.c
wm8994.h
wm8997-tables.c
wm8998-tables.c