mirror of
https://github.com/torvalds/linux.git
synced 2025-11-08 20:49:35 +02:00
The vzalloc() function has no 2-factor argument form, so multiplication
factors need to be wrapped in array_size(). This patch replaces cases of:
vzalloc(a * b)
with:
vzalloc(array_size(a, b))
as well as handling cases of:
vzalloc(a * b * c)
with:
vzalloc(array3_size(a, b, c))
This does, however, attempt to ignore constant size factors like:
vzalloc(4 * 1024)
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.
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
vzalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
vzalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
vzalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
vzalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
vzalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
vzalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
vzalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
vzalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
vzalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
vzalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
vzalloc(
- sizeof(TYPE) * (COUNT_ID)
+ array_size(COUNT_ID, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(TYPE) * COUNT_ID
+ array_size(COUNT_ID, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(TYPE) * (COUNT_CONST)
+ array_size(COUNT_CONST, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(TYPE) * COUNT_CONST
+ array_size(COUNT_CONST, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(THING) * (COUNT_ID)
+ array_size(COUNT_ID, sizeof(THING))
, ...)
|
vzalloc(
- sizeof(THING) * COUNT_ID
+ array_size(COUNT_ID, sizeof(THING))
, ...)
|
vzalloc(
- sizeof(THING) * (COUNT_CONST)
+ array_size(COUNT_CONST, sizeof(THING))
, ...)
|
vzalloc(
- sizeof(THING) * COUNT_CONST
+ array_size(COUNT_CONST, sizeof(THING))
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
vzalloc(
- SIZE * COUNT
+ array_size(COUNT, SIZE)
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
vzalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vzalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vzalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vzalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vzalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
vzalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
vzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
vzalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
vzalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
vzalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
vzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
vzalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vzalloc(
- 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 E1, E2, E3;
constant C1, C2, C3;
@@
(
vzalloc(C1 * C2 * C3, ...)
|
vzalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants.
@@
expression E1, E2;
constant C1, C2;
@@
(
vzalloc(C1 * C2, ...)
|
vzalloc(
- E1 * E2
+ array_size(E1, E2)
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||
|---|---|---|
| .. | ||
| reg_srcs | ||
| .gitignore | ||
| atom-bits.h | ||
| atom-names.h | ||
| atom-types.h | ||
| atom.c | ||
| atom.h | ||
| atombios.h | ||
| atombios_crtc.c | ||
| atombios_dp.c | ||
| atombios_encoders.c | ||
| atombios_i2c.c | ||
| avivod.h | ||
| btc_dpm.c | ||
| btc_dpm.h | ||
| btcd.h | ||
| cayman_blit_shaders.c | ||
| cayman_blit_shaders.h | ||
| ci_dpm.c | ||
| ci_dpm.h | ||
| ci_smc.c | ||
| cik.c | ||
| cik_blit_shaders.c | ||
| cik_blit_shaders.h | ||
| cik_reg.h | ||
| cik_sdma.c | ||
| cikd.h | ||
| clearstate_cayman.h | ||
| clearstate_ci.h | ||
| clearstate_defs.h | ||
| clearstate_evergreen.h | ||
| clearstate_si.h | ||
| cypress_dpm.c | ||
| cypress_dpm.h | ||
| dce3_1_afmt.c | ||
| dce6_afmt.c | ||
| evergreen.c | ||
| evergreen_blit_shaders.c | ||
| evergreen_blit_shaders.h | ||
| evergreen_cs.c | ||
| evergreen_dma.c | ||
| evergreen_hdmi.c | ||
| evergreen_reg.h | ||
| evergreen_smc.h | ||
| evergreend.h | ||
| Kconfig | ||
| kv_dpm.c | ||
| kv_dpm.h | ||
| kv_smc.c | ||
| Makefile | ||
| mkregtable.c | ||
| ni.c | ||
| ni_dma.c | ||
| ni_dpm.c | ||
| ni_dpm.h | ||
| ni_reg.h | ||
| nid.h | ||
| nislands_smc.h | ||
| ObjectID.h | ||
| ppsmc.h | ||
| pptable.h | ||
| r100.c | ||
| r100_track.h | ||
| r100d.h | ||
| r200.c | ||
| r300.c | ||
| r300_reg.h | ||
| r300d.h | ||
| r420.c | ||
| r420d.h | ||
| r500_reg.h | ||
| r520.c | ||
| r520d.h | ||
| r600.c | ||
| r600_blit_shaders.c | ||
| r600_blit_shaders.h | ||
| r600_cs.c | ||
| r600_dma.c | ||
| r600_dpm.c | ||
| r600_dpm.h | ||
| r600_hdmi.c | ||
| r600_reg.h | ||
| r600d.h | ||
| radeon.h | ||
| radeon_acpi.c | ||
| radeon_acpi.h | ||
| radeon_agp.c | ||
| radeon_asic.c | ||
| radeon_asic.h | ||
| radeon_atombios.c | ||
| radeon_atpx_handler.c | ||
| radeon_audio.c | ||
| radeon_audio.h | ||
| radeon_benchmark.c | ||
| radeon_bios.c | ||
| radeon_clocks.c | ||
| radeon_combios.c | ||
| radeon_connectors.c | ||
| radeon_cs.c | ||
| radeon_cursor.c | ||
| radeon_device.c | ||
| radeon_display.c | ||
| radeon_dp_auxch.c | ||
| radeon_dp_mst.c | ||
| radeon_drv.c | ||
| radeon_drv.h | ||
| radeon_encoders.c | ||
| radeon_family.h | ||
| radeon_fb.c | ||
| radeon_fence.c | ||
| radeon_gart.c | ||
| radeon_gem.c | ||
| radeon_i2c.c | ||
| radeon_ib.c | ||
| radeon_irq_kms.c | ||
| radeon_kms.c | ||
| radeon_legacy_crtc.c | ||
| radeon_legacy_encoders.c | ||
| radeon_legacy_tv.c | ||
| radeon_mn.c | ||
| radeon_mode.h | ||
| radeon_object.c | ||
| radeon_object.h | ||
| radeon_pm.c | ||
| radeon_prime.c | ||
| radeon_reg.h | ||
| radeon_ring.c | ||
| radeon_sa.c | ||
| radeon_semaphore.c | ||
| radeon_sync.c | ||
| radeon_test.c | ||
| radeon_trace.h | ||
| radeon_trace_points.c | ||
| radeon_ttm.c | ||
| radeon_ucode.c | ||
| radeon_ucode.h | ||
| radeon_uvd.c | ||
| radeon_vce.c | ||
| radeon_vm.c | ||
| rs100d.h | ||
| rs400.c | ||
| rs400d.h | ||
| rs600.c | ||
| rs600d.h | ||
| rs690.c | ||
| rs690d.h | ||
| rs780_dpm.c | ||
| rs780_dpm.h | ||
| rs780d.h | ||
| rv6xx_dpm.c | ||
| rv6xx_dpm.h | ||
| rv6xxd.h | ||
| rv200d.h | ||
| rv250d.h | ||
| rv350d.h | ||
| rv515.c | ||
| rv515d.h | ||
| rv730_dpm.c | ||
| rv730d.h | ||
| rv740_dpm.c | ||
| rv740d.h | ||
| rv770.c | ||
| rv770_dma.c | ||
| rv770_dpm.c | ||
| rv770_dpm.h | ||
| rv770_smc.c | ||
| rv770_smc.h | ||
| rv770d.h | ||
| si.c | ||
| si_blit_shaders.c | ||
| si_blit_shaders.h | ||
| si_dma.c | ||
| si_dpm.c | ||
| si_dpm.h | ||
| si_reg.h | ||
| si_smc.c | ||
| sid.h | ||
| sislands_smc.h | ||
| smu7.h | ||
| smu7_discrete.h | ||
| smu7_fusion.h | ||
| sumo_dpm.c | ||
| sumo_dpm.h | ||
| sumo_smc.c | ||
| sumod.h | ||
| trinity_dpm.c | ||
| trinity_dpm.h | ||
| trinity_smc.c | ||
| trinityd.h | ||
| uvd_v1_0.c | ||
| uvd_v2_2.c | ||
| uvd_v3_1.c | ||
| uvd_v4_2.c | ||
| vce_v1_0.c | ||
| vce_v2_0.c | ||