linux-xiaomi-chiron/drivers/mtd/nand/raw
Jason A. Donenfeld 81895a65ec treewide: use prandom_u32_max() when possible, part 1
Rather than incurring a division or requesting too many random bytes for
the given range, use the prandom_u32_max() function, which only takes
the minimum required bytes from the RNG and avoids divisions. This was
done mechanically with this coccinelle script:

@basic@
expression E;
type T;
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
typedef u64;
@@
(
- ((T)get_random_u32() % (E))
+ prandom_u32_max(E)
|
- ((T)get_random_u32() & ((E) - 1))
+ prandom_u32_max(E * XXX_MAKE_SURE_E_IS_POW2)
|
- ((u64)(E) * get_random_u32() >> 32)
+ prandom_u32_max(E)
|
- ((T)get_random_u32() & ~PAGE_MASK)
+ prandom_u32_max(PAGE_SIZE)
)

@multi_line@
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
identifier RAND;
expression E;
@@

-       RAND = get_random_u32();
        ... when != RAND
-       RAND %= (E);
+       RAND = prandom_u32_max(E);

// Find a potential literal
@literal_mask@
expression LITERAL;
type T;
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
position p;
@@

        ((T)get_random_u32()@p & (LITERAL))

// Add one to the literal.
@script:python add_one@
literal << literal_mask.LITERAL;
RESULT;
@@

value = None
if literal.startswith('0x'):
        value = int(literal, 16)
elif literal[0] in '123456789':
        value = int(literal, 10)
if value is None:
        print("I don't know how to handle %s" % (literal))
        cocci.include_match(False)
elif value == 2**32 - 1 or value == 2**31 - 1 or value == 2**24 - 1 or value == 2**16 - 1 or value == 2**8 - 1:
        print("Skipping 0x%x for cleanup elsewhere" % (value))
        cocci.include_match(False)
elif value & (value + 1) != 0:
        print("Skipping 0x%x because it's not a power of two minus one" % (value))
        cocci.include_match(False)
elif literal.startswith('0x'):
        coccinelle.RESULT = cocci.make_expr("0x%x" % (value + 1))
else:
        coccinelle.RESULT = cocci.make_expr("%d" % (value + 1))

// Replace the literal mask with the calculated result.
@plus_one@
expression literal_mask.LITERAL;
position literal_mask.p;
expression add_one.RESULT;
identifier FUNC;
@@

-       (FUNC()@p & (LITERAL))
+       prandom_u32_max(RESULT)

@collapse_ret@
type T;
identifier VAR;
expression E;
@@

 {
-       T VAR;
-       VAR = (E);
-       return VAR;
+       return E;
 }

@drop_var@
type T;
identifier VAR;
@@

 {
-       T VAR;
        ... when != VAR
 }

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Yury Norov <yury.norov@gmail.com>
Reviewed-by: KP Singh <kpsingh@kernel.org>
Reviewed-by: Jan Kara <jack@suse.cz> # for ext4 and sbitmap
Reviewed-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com> # for drbd
Acked-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Heiko Carstens <hca@linux.ibm.com> # for s390
Acked-by: Ulf Hansson <ulf.hansson@linaro.org> # for mmc
Acked-by: Darrick J. Wong <djwong@kernel.org> # for xfs
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-10-11 17:42:55 -06:00
..
atmel mtd: rawnand: atmel: Unmap streaming DMA mappings 2022-09-21 10:38:46 +02:00
bcm47xxnflash mtd: rawnand: bcm47xx: fix spelling typo in comment 2022-09-21 10:38:47 +02:00
brcmnand mtd: rawnand: brcmnand: Add individual glue driver selection 2022-09-21 10:38:46 +02:00
gpmi-nand mtd: rawnand: gpmi: Fix typo 'the the' in comment 2022-09-21 10:38:46 +02:00
ingenic SPI NOR core changes: 2022-03-18 20:14:42 +01:00
ams-delta.c mtd: rawnand: ams-delta: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:14 +02:00
arasan-nand-controller.c mtd: rawnand: arasan: stop using 0 as NULL pointer 2022-09-21 10:38:46 +02:00
au1550nd.c mtd: rawnand: au1550nd: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:16 +02:00
cadence-nand-controller.c mtd: rawnand: cadence: Remove an unneeded result variable 2022-09-21 10:38:47 +02:00
cafe_nand.c mtd: rawnand: cafe: Use correct function name in comment block 2022-09-21 10:38:46 +02:00
cs553x_nand.c mtd: rawnand: cs553x: simplify the return expression of cs553x_write_ctrl_byte() 2022-05-12 16:43:03 +02:00
davinci_nand.c mtd: rawnand: davinci: Remove redundant unsigned comparison to zero 2022-04-04 10:34:46 +02:00
denali.c mtd: rawnand: Use the new ECC engine type enumeration 2020-09-28 15:59:42 +02:00
denali.h mtd: rawnand: Replace zero-length array with flexible-array member 2020-03-11 16:17:54 +01:00
denali_dt.c mtd: rawnand: denali: Make use of the helper function devm_platform_ioremap_resource_byname() 2021-09-14 19:34:34 +02:00
denali_pci.c mtd: rawnand: denali: Use managed device resources 2022-04-21 09:34:00 +02:00
diskonchip.c SPI NOR core changes: 2020-12-16 18:48:16 +01:00
fsl_elbc_nand.c mtd: rawnand: fsl_elbc: Fix none ECC mode 2022-09-20 10:06:59 +02:00
fsl_ifc_nand.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
fsl_upm.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
fsmc_nand.c mtd: rawnand: fsmc: Fix timing computation 2021-12-03 14:33:45 +01:00
gpio.c mtd: rawnand: gpio: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:18 +02:00
hisi504_nand.c mtd: rawnand: hisi504: Make use of the helper function devm_platform_ioremap_resource() 2021-09-14 19:34:41 +02:00
intel-nand-controller.c mtd: rawnand: intel: Use devm_platform_ioremap_resource_byname() 2022-09-20 10:06:56 +02:00
internals.h mtd: rawnand: Choose the best timings, NV-DDR included 2021-05-26 10:52:43 +02:00
Kconfig mtd: rawnand: meson: stop supporting legacy clocks 2022-09-21 10:38:47 +02:00
lpc32xx_mlc.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
lpc32xx_slc.c Revert "mtd: rawnand: lpc32xx_slc: Fix external use of SW Hamming ECC helper" 2021-10-15 12:21:09 +02:00
Makefile mtd: nand: make mtk_ecc.c a separated module 2022-04-27 18:12:35 +02:00
marvell_nand.c mtd: rawnand: marvell: Fix error handle regarding dma_map_sg 2022-09-21 10:38:46 +02:00
meson_nand.c mtd: rawnand: meson: refine resource getting in probe 2022-09-21 10:38:47 +02:00
mpc5121_nfc.c mtd: rawnand: mpc5121: Check before clk_disable_unprepare() not needed 2022-05-16 18:34:38 +02:00
mtk_nand.c mtd: nand: make mtk_ecc.c a separated module 2022-04-27 18:12:35 +02:00
mxc_nand.c mtd: rawnand: mxc: Remove unneeded of_match_ptr() 2021-03-28 19:13:39 +02:00
mxic_nand.c mtd: nand: ecc-hamming: Move Hamming code to the generic NAND layer 2020-12-10 22:37:29 +01:00
nand_amd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_base.c Raw NAND core changes: 2022-10-07 16:56:14 +02:00
nand_bbt.c mtd: always initialize 'stats' in struct mtd_oob_ops 2022-09-21 10:38:07 +02:00
nand_esmt.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_hynix.c mtd: rawnand: hynix: Add support for H27UCG8T2ETR-BC MLC NAND 2021-10-15 12:24:50 +02:00
nand_ids.c Revert "mtd: rawnand: add support for Toshiba TC58NVG0S3HTA00 NAND flash" 2022-06-09 15:07:07 +02:00
nand_jedec.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_legacy.c mtd: rawnand: Avoid accessing NV-DDR timings from legacy code 2021-05-26 10:43:52 +02:00
nand_macronix.c mtd: rawnand: Create a nand_chip operations structure 2020-06-26 08:35:04 +02:00
nand_micron.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_onfi.c mtd: rawnand: onfi: Fix endianness when reading NV-DDR values 2021-06-18 09:45:20 +02:00
nand_samsung.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_timings.c mtd: rawnand: Add a helper to find the closest ONFI NV-DDR mode 2021-05-26 10:43:59 +02:00
nand_toshiba.c mtd: rawnand: kioxia: Add support for TH58NVG3S0HBAI4 2022-05-12 16:43:01 +02:00
nandsim.c treewide: use prandom_u32_max() when possible, part 1 2022-10-11 17:42:55 -06:00
ndfc.c Revert "mtd: rawnand: ndfc: Fix external use of SW Hamming ECC helper" 2021-10-15 12:21:07 +02:00
omap2.c mtd: rawnand: omap2: Suppress error message after WARN in .remove() 2022-06-09 15:06:21 +02:00
omap_elm.c mtd: rawnand: omap_elm: Add compatible for AM64 ELM 2022-04-11 10:56:33 +02:00
orion_nand.c mtd: rawnand: orion: Use devm_clk_get_optional() 2022-09-21 10:38:46 +02:00
oxnas_nand.c mtd: rawnand: oxnas: Make use of the helper function devm_platform_ioremap_resource() 2021-09-14 19:34:51 +02:00
pasemi_nand.c mtd: rawnand: pasemi: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:24 +02:00
pl35x-nand-controller.c mtd: rawnand: pl353: Set the nand chip node as the flash node 2022-02-18 15:14:58 +01:00
plat_nand.c mtd: rawnand: plat_nand: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:26 +02:00
qcom_nandc.c mtd: nand: raw: qcom_nandc: add support for unprotected spare data pages 2022-06-17 08:30:19 +02:00
r852.c mtd: rawnand: r852: use DEVICE_ATTR_RO() helper macro 2021-06-18 09:45:21 +02:00
r852.h mtd: rawnand: r852: Move the ECC initialization to ->attach_chip() 2020-11-20 12:30:53 +01:00
renesas-nand-controller.c mtd: rawnand: renesas: Use runtime PM instead of the raw clock API 2022-05-16 18:36:21 +02:00
rockchip-nand-controller.c mtd: rawnand: rockchip: Check before clk_disable_unprepare() not needed 2022-05-16 18:34:36 +02:00
s3c2410.c SPI NOR core changes: 2020-12-16 18:48:16 +01:00
sh_flctl.c mtd: rawnand: Fix return value check of wait_for_completion_timeout 2022-04-21 09:29:03 +02:00
sharpsl.c block: remove genhd.h 2022-02-02 07:49:59 -07:00
sm_common.c mtd: always initialize 'stats' in struct mtd_oob_ops 2022-09-21 10:38:07 +02:00
sm_common.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
socrates_nand.c mtd: rawnand: socrates: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:29 +02:00
stm32_fmc2_nand.c mtd: rawnand: stm32_fmc2: switch to using devm_fwnode_gpiod_get() 2022-09-21 10:38:47 +02:00
sunxi_nand.c mtd: rawnand: sunxi: remove unnecessary oom message 2021-06-11 20:43:33 +02:00
tegra_nand.c mtd: rawnand: tegra: Don't skip cleanup after mtd_device_unregister() failed 2022-06-09 15:06:23 +02:00
tmio_nand.c mtd: rawnand: tmio: check return value after calling platform_get_resource() 2022-04-27 17:15:09 +02:00
txx9ndfmc.c Revert "mtd: rawnand: txx9ndfmc: Fix external use of SW Hamming ECC helper" 2021-10-15 12:21:01 +02:00
vf610_nfc.c mtd: rawnand: vf610: Make use of the helper function devm_platform_ioremap_resource() 2021-09-14 19:35:03 +02:00
xway_nand.c mtd: rawnand: xway: Keep the driver compatible with on-die ECC engines 2021-10-15 12:21:31 +02:00