mirror of https://github.com/torvalds/linux.git
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>
|
||
|---|---|---|
| .. | ||
| gvt | ||
| selftests | ||
| Kconfig | ||
| Kconfig.debug | ||
| Makefile | ||
| dvo.h | ||
| dvo_ch7xxx.c | ||
| dvo_ch7017.c | ||
| dvo_ivch.c | ||
| dvo_ns2501.c | ||
| dvo_sil164.c | ||
| dvo_tfp410.c | ||
| i915_cmd_parser.c | ||
| i915_debugfs.c | ||
| i915_drv.c | ||
| i915_drv.h | ||
| i915_gem.c | ||
| i915_gem.h | ||
| i915_gem_batch_pool.c | ||
| i915_gem_batch_pool.h | ||
| i915_gem_clflush.c | ||
| i915_gem_clflush.h | ||
| i915_gem_context.c | ||
| i915_gem_context.h | ||
| i915_gem_dmabuf.c | ||
| i915_gem_evict.c | ||
| i915_gem_execbuffer.c | ||
| i915_gem_fence_reg.c | ||
| i915_gem_fence_reg.h | ||
| i915_gem_gtt.c | ||
| i915_gem_gtt.h | ||
| i915_gem_internal.c | ||
| i915_gem_object.c | ||
| i915_gem_object.h | ||
| i915_gem_render_state.c | ||
| i915_gem_render_state.h | ||
| i915_gem_shrinker.c | ||
| i915_gem_stolen.c | ||
| i915_gem_tiling.c | ||
| i915_gem_userptr.c | ||
| i915_gemfs.c | ||
| i915_gemfs.h | ||
| i915_gpu_error.c | ||
| i915_gpu_error.h | ||
| i915_ioc32.c | ||
| i915_irq.c | ||
| i915_memcpy.c | ||
| i915_mm.c | ||
| i915_oa_bdw.c | ||
| i915_oa_bdw.h | ||
| i915_oa_bxt.c | ||
| i915_oa_bxt.h | ||
| i915_oa_cflgt2.c | ||
| i915_oa_cflgt2.h | ||
| i915_oa_cflgt3.c | ||
| i915_oa_cflgt3.h | ||
| i915_oa_chv.c | ||
| i915_oa_chv.h | ||
| i915_oa_cnl.c | ||
| i915_oa_cnl.h | ||
| i915_oa_glk.c | ||
| i915_oa_glk.h | ||
| i915_oa_hsw.c | ||
| i915_oa_hsw.h | ||
| i915_oa_icl.c | ||
| i915_oa_icl.h | ||
| i915_oa_kblgt2.c | ||
| i915_oa_kblgt2.h | ||
| i915_oa_kblgt3.c | ||
| i915_oa_kblgt3.h | ||
| i915_oa_sklgt2.c | ||
| i915_oa_sklgt2.h | ||
| i915_oa_sklgt3.c | ||
| i915_oa_sklgt3.h | ||
| i915_oa_sklgt4.c | ||
| i915_oa_sklgt4.h | ||
| i915_params.c | ||
| i915_params.h | ||
| i915_pci.c | ||
| i915_perf.c | ||
| i915_pmu.c | ||
| i915_pmu.h | ||
| i915_pvinfo.h | ||
| i915_query.c | ||
| i915_query.h | ||
| i915_reg.h | ||
| i915_request.c | ||
| i915_request.h | ||
| i915_scheduler.h | ||
| i915_selftest.h | ||
| i915_suspend.c | ||
| i915_sw_fence.c | ||
| i915_sw_fence.h | ||
| i915_syncmap.c | ||
| i915_syncmap.h | ||
| i915_sysfs.c | ||
| i915_timeline.c | ||
| i915_timeline.h | ||
| i915_trace.h | ||
| i915_trace_points.c | ||
| i915_utils.h | ||
| i915_vgpu.c | ||
| i915_vgpu.h | ||
| i915_vma.c | ||
| i915_vma.h | ||
| intel_acpi.c | ||
| intel_atomic.c | ||
| intel_atomic_plane.c | ||
| intel_audio.c | ||
| intel_bios.c | ||
| intel_bios.h | ||
| intel_breadcrumbs.c | ||
| intel_cdclk.c | ||
| intel_color.c | ||
| intel_crt.c | ||
| intel_csr.c | ||
| intel_ddi.c | ||
| intel_device_info.c | ||
| intel_device_info.h | ||
| intel_display.c | ||
| intel_display.h | ||
| intel_dp.c | ||
| intel_dp_aux_backlight.c | ||
| intel_dp_link_training.c | ||
| intel_dp_mst.c | ||
| intel_dpio_phy.c | ||
| intel_dpll_mgr.c | ||
| intel_dpll_mgr.h | ||
| intel_drv.h | ||
| intel_dsi.c | ||
| intel_dsi.h | ||
| intel_dsi_dcs_backlight.c | ||
| intel_dsi_pll.c | ||
| intel_dsi_vbt.c | ||
| intel_dvo.c | ||
| intel_engine_cs.c | ||
| intel_fbc.c | ||
| intel_fbdev.c | ||
| intel_fifo_underrun.c | ||
| intel_frontbuffer.c | ||
| intel_frontbuffer.h | ||
| intel_gpu_commands.h | ||
| intel_guc.c | ||
| intel_guc.h | ||
| intel_guc_ads.c | ||
| intel_guc_ads.h | ||
| intel_guc_ct.c | ||
| intel_guc_ct.h | ||
| intel_guc_fw.c | ||
| intel_guc_fw.h | ||
| intel_guc_fwif.h | ||
| intel_guc_log.c | ||
| intel_guc_log.h | ||
| intel_guc_reg.h | ||
| intel_guc_submission.c | ||
| intel_guc_submission.h | ||
| intel_gvt.c | ||
| intel_gvt.h | ||
| intel_hangcheck.c | ||
| intel_hdcp.c | ||
| intel_hdmi.c | ||
| intel_hotplug.c | ||
| intel_huc.c | ||
| intel_huc.h | ||
| intel_huc_fw.c | ||
| intel_huc_fw.h | ||
| intel_i2c.c | ||
| intel_lpe_audio.c | ||
| intel_lrc.c | ||
| intel_lrc.h | ||
| intel_lrc_reg.h | ||
| intel_lspcon.c | ||
| intel_lvds.c | ||
| intel_mocs.c | ||
| intel_mocs.h | ||
| intel_modes.c | ||
| intel_opregion.c | ||
| intel_opregion.h | ||
| intel_overlay.c | ||
| intel_panel.c | ||
| intel_pipe_crc.c | ||
| intel_pm.c | ||
| intel_psr.c | ||
| intel_renderstate.h | ||
| intel_renderstate_gen6.c | ||
| intel_renderstate_gen7.c | ||
| intel_renderstate_gen8.c | ||
| intel_renderstate_gen9.c | ||
| intel_ringbuffer.c | ||
| intel_ringbuffer.h | ||
| intel_runtime_pm.c | ||
| intel_sdvo.c | ||
| intel_sdvo_regs.h | ||
| intel_sideband.c | ||
| intel_sprite.c | ||
| intel_tv.c | ||
| intel_uc.c | ||
| intel_uc.h | ||
| intel_uc_fw.c | ||
| intel_uc_fw.h | ||
| intel_uncore.c | ||
| intel_uncore.h | ||
| intel_vbt_defs.h | ||
| intel_wopcm.c | ||
| intel_wopcm.h | ||
| intel_workarounds.c | ||
| intel_workarounds.h | ||