Kees Cook
42bc47b353
treewide: Use array_size() in vmalloc()
The vmalloc() function has no 2-factor argument form, so multiplication
factors need to be wrapped in array_size(). This patch replaces cases of:
vmalloc(a * b)
with:
vmalloc(array_size(a, b))
as well as handling cases of:
vmalloc(a * b * c)
with:
vmalloc(array3_size(a, b, c))
This does, however, attempt to ignore constant size factors like:
vmalloc(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;
@@
(
vmalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
vmalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
vmalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
vmalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
vmalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
vmalloc(
- 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;
@@
(
vmalloc(
- sizeof(TYPE) * (COUNT_ID)
+ array_size(COUNT_ID, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT_ID
+ array_size(COUNT_ID, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * (COUNT_CONST)
+ array_size(COUNT_CONST, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT_CONST
+ array_size(COUNT_CONST, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT_ID)
+ array_size(COUNT_ID, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT_ID
+ array_size(COUNT_ID, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT_CONST)
+ array_size(COUNT_CONST, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT_CONST
+ array_size(COUNT_CONST, sizeof(THING))
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
vmalloc(
- 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;
@@
(
vmalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vmalloc(
- 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;
@@
(
vmalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
vmalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
vmalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
vmalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
vmalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
vmalloc(
- 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;
@@
(
vmalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- 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;
@@
(
vmalloc(C1 * C2 * C3, ...)
|
vmalloc(
- 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;
@@
(
vmalloc(C1 * C2, ...)
|
vmalloc(
- E1 * E2
+ array_size(E1, E2)
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
|
2018-06-12 16:19:22 -07:00 |
| .. |
|
accessibility
|
|
|
|
acpi
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
amba
|
Merge branch 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
|
2018-06-06 13:49:25 -07:00 |
|
android
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
ata
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
atm
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
auxdisplay
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
base
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
bcma
|
dma-mapping updates for 4.18:
|
2018-06-04 10:58:12 -07:00 |
|
block
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
bluetooth
|
Bluetooth: btusb: Add additional device ID for RTL8822BE
|
2018-05-30 15:45:01 +02:00 |
|
bus
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
cdrom
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
char
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
clk
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
clocksource
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
connector
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2018-06-06 18:39:49 -07:00 |
|
cpufreq
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
cpuidle
|
powerpc updates for 4.18
|
2018-06-07 10:23:33 -07:00 |
|
crypto
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dax
|
libnvdimm for 4.18
|
2018-06-08 17:21:52 -07:00 |
|
dca
|
|
|
|
devfreq
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dio
|
|
|
|
dma
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dma-buf
|
|
|
|
edac
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
eisa
|
|
|
|
extcon
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
firewire
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
firmware
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
fmc
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
fpga
|
|
|
|
fsi
|
|
|
|
gpio
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
gpu
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
hid
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
hsi
|
|
|
|
hv
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
hwmon
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
hwspinlock
|
treewide: Use struct_size() for devm_kmalloc() and friends
|
2018-06-06 11:15:43 -07:00 |
|
hwtracing
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
i2c
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
ide
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
idle
|
|
|
|
iio
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
infiniband
|
treewide: kvzalloc() -> kvcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
input
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
iommu
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
ipack
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
irqchip
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
isdn
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
leds
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
lightnvm
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
macintosh
|
powerpc updates for 4.18
|
2018-06-07 10:23:33 -07:00 |
|
mailbox
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
mcb
|
|
|
|
md
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
media
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
memory
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
memstick
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
message
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
mfd
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
misc
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
mmc
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
mtd
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
mux
|
|
|
|
net
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
nfc
|
treewide: devm_kmalloc() -> devm_kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
ntb
|
treewide: kzalloc_node() -> kcalloc_node()
|
2018-06-12 16:19:22 -07:00 |
|
nubus
|
Char/Misc driver patches for 4.18-rc1
|
2018-06-05 16:20:22 -07:00 |
|
nvdimm
|
Merge branch 'for-4.18/mcsafe' into libnvdimm-for-next
|
2018-06-08 15:16:44 -07:00 |
|
nvme
|
for-linus-20180608
|
2018-06-08 13:36:19 -07:00 |
|
nvmem
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
of
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
opp
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
oprofile
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
parisc
|
dma-mapping updates for 4.18:
|
2018-06-04 10:58:12 -07:00 |
|
parport
|
|
|
|
pci
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
pcmcia
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
perf
|
drivers/bus: arm-cci: fix build warnings
|
2018-05-29 16:38:16 +01:00 |
|
phy
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2018-06-06 18:39:49 -07:00 |
|
pinctrl
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
platform
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
pnp
|
media updates for v4.18-rc1
|
2018-06-07 12:34:37 -07:00 |
|
power
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
powercap
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
pps
|
|
|
|
ps3
|
|
|
|
ptp
|
ptp_qoriq: move some definitions to header file
|
2018-05-28 23:05:11 -04:00 |
|
pwm
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
rapidio
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
ras
|
|
|
|
regulator
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
remoteproc
|
|
|
|
reset
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
rpmsg
|
|
|
|
rtc
|
- New Device Support
|
2018-06-11 07:20:17 -07:00 |
|
s390
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
sbus
|
|
|
|
scsi
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
sfi
|
|
|
|
sh
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
siox
|
|
|
|
slimbus
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
sn
|
|
|
|
soc
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
soundwire
|
Char/Misc driver patches for 4.18-rc1
|
2018-06-05 16:20:22 -07:00 |
|
spi
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
spmi
|
|
|
|
ssb
|
|
|
|
staging
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
target
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
tc
|
|
|
|
tee
|
|
|
|
thermal
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
thunderbolt
|
|
|
|
tty
|
treewide: devm_kzalloc() -> devm_kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
uio
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
usb
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
uwb
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
vfio
|
Merge branch 'work.aio-1' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2018-06-04 13:57:43 -07:00 |
|
vhost
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
video
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
virt
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
virtio
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
visorbus
|
|
|
|
vlynq
|
|
|
|
vme
|
|
|
|
w1
|
Char/Misc driver patches for 4.18-rc1
|
2018-06-05 16:20:22 -07:00 |
|
watchdog
|
|
|
|
xen
|
treewide: kvmalloc() -> kvmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
zorro
|
- Introduce arithmetic overflow test helper functions (Rasmus)
|
2018-06-06 17:27:14 -07:00 |
|
Kconfig
|
|
|
|
Makefile
|
|
|