mirror of https://gitee.com/openkylin/linux.git
fad953ce0b
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 | ||
Kconfig | ||
Makefile | ||
ObjectID.h | ||
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 | ||
kv_dpm.c | ||
kv_dpm.h | ||
kv_smc.c | ||
mkregtable.c | ||
ni.c | ||
ni_dma.c | ||
ni_dpm.c | ||
ni_dpm.h | ||
ni_reg.h | ||
nid.h | ||
nislands_smc.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 |