From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 93A2AC433FE for ; Mon, 17 Oct 2022 12:00:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E1D686B0072; Mon, 17 Oct 2022 08:00:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DA5C06B0074; Mon, 17 Oct 2022 08:00:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C46646B0075; Mon, 17 Oct 2022 08:00:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id AB6446B0072 for ; Mon, 17 Oct 2022 08:00:01 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 7065DA0DA9 for ; Mon, 17 Oct 2022 12:00:01 +0000 (UTC) X-FDA: 80030297802.11.30899BA Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf14.hostedemail.com (Postfix) with ESMTP id 4FF6A100026 for ; Mon, 17 Oct 2022 11:59:58 +0000 (UTC) Received: from dggemv704-chm.china.huawei.com (unknown [172.30.72.55]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Mrb7T71GfzpW32; Mon, 17 Oct 2022 19:56:37 +0800 (CST) Received: from kwepemm600005.china.huawei.com (7.193.23.191) by dggemv704-chm.china.huawei.com (10.3.19.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 17 Oct 2022 19:59:34 +0800 Received: from [10.67.103.158] (10.67.103.158) by kwepemm600005.china.huawei.com (7.193.23.191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 17 Oct 2022 19:59:31 +0800 Subject: Re: [PATCH v6 0/7] treewide cleanup of random integer usage To: "Jason A. Donenfeld" , , CC: Andreas Noever , Andrew Morton , Andy Shevchenko , Borislav Petkov , "Catalin Marinas" , =?UTF-8?Q?Christoph_B=c3=b6hmwalder?= , Christoph Hellwig , Christophe Leroy , Daniel Borkmann , Dave Airlie , Dave Hansen , "David S . Miller" , "Eric Dumazet" , Florian Westphal , "Greg Kroah-Hartman" , "H . Peter Anvin" , Heiko Carstens , Helge Deller , Herbert Xu , Huacai Chen , Hugh Dickins , Jakub Kicinski , "James E . J . Bottomley" , Jan Kara , Jason Gunthorpe , Jens Axboe , Johannes Berg , Jonathan Corbet , Jozsef Kadlecsik , KP Singh , Kees Cook , Marco Elver , Mauro Carvalho Chehab , "Michael Ellerman" , Pablo Neira Ayuso , "Paolo Abeni" , Peter Zijlstra , "Richard Weinberger" , Russell King , "Theodore Ts'o" , Thomas Bogendoerfer , "Thomas Gleixner" , Thomas Graf , Ulf Hansson , Vignesh Raghavendra , WANG Xuerui , Will Deacon , Yury Norov , , , , , , , , , , , , , , , , , , , , , , , , , References: <20221010230613.1076905-1-Jason@zx2c4.com> From: liulongfang Message-ID: <8dad6a2c-9ef6-086e-0fb0-cd9115d4faca@huawei.com> Date: Mon, 17 Oct 2022 19:59:30 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20221010230613.1076905-1-Jason@zx2c4.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.158] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600005.china.huawei.com (7.193.23.191) X-CFilter-Loop: Reflected ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=none; spf=pass (imf14.hostedemail.com: domain of liulongfang@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=liulongfang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1666008000; a=rsa-sha256; cv=none; b=o1TUqg3yTzNLxN5TR6H/WzLKT8XnWKJs22IVzDShJPO0LSjnVOc3yjpPn1eAtGWJeycb2o DfDByBUMImMLglF7L2Oee7M05jqX+xERBWHPWz1D6ae5y/ARW443pG5m22k96uDLr291dz JEl/apXwEuFymnJwDni4wfASSBSAkj4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1666008000; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rLsUWuG673r5ithdF00cJV0y6ETj5LEmPPhl44cZhb8=; b=HJ1CAqQSKWYBCa7EdtJhBdaXHka4t5PpOc1O8blFtkNVL+dKVGVRWBjLWK9imVbP7JMKd2 UlFz+PPQDQdeRAqigy7qeZZbCcHS7MxDu4TCLe64Q27/LOnSeV0mXsmrYdce+8NPTDMrjc 4eKMyK9oUt425R8DyqbUT0d0ErXF6Mw= X-Stat-Signature: fkdeyffidkgoqh7xh9r1hoxreh73j4r9 X-Rspamd-Queue-Id: 4FF6A100026 Authentication-Results: imf14.hostedemail.com; dkim=none; spf=pass (imf14.hostedemail.com: domain of liulongfang@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=liulongfang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1666007998-2692 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 2022/10/11 7:06, Jason A. Donenfeld Wrote: > Changes v5->v6: > - Added a few missing conversions that weren't in my older tree, so now > this should be ready to go, as well as a couple nits people had from > v5. Barring something large and unforeseen, this is the "final > version", as this is ready to ship. Thanks to everyone who reviewed > this. > > Hi folks, > > This is a five part treewide cleanup of random integer handling. The > rules for random integers are: > > - If you want a secure or an insecure random u64, use get_random_u64(). > - If you want a secure or an insecure random u32, use get_random_u32(). > * The old function prandom_u32() has been deprecated for a while now > and is just a wrapper around get_random_u32(). Same for > get_random_int(). > - If you want a secure or an insecure random u16, use get_random_u16(). > - If you want a secure or an insecure random u8, use get_random_u8(). > - If you want secure or insecure random bytes, use get_random_bytes(). > * The old function prandom_bytes() has been deprecated for a while now > and has long been a wrapper around get_random_bytes(). > - If you want a non-uniform random u32, u16, or u8 bounded by a certain > open interval maximum, use prandom_u32_max(). > * I say "non-uniform", because it doesn't do any rejection sampling or > divisions. Hence, it stays within the prandom_* namespace. > > These rules ought to be applied uniformly, so that we can clean up the > deprecated functions, and earn the benefits of using the modern > functions. In particular, in addition to the boring substitutions, this > patchset accomplishes a few nice effects: > > - By using prandom_u32_max() with an upper-bound that the compiler can > prove at compile-time is ≤65536 or ≤256, internally get_random_u16() > or get_random_u8() is used, which wastes fewer batched random bytes, > and hence has higher throughput. > > - By using prandom_u32_max() instead of %, when the upper-bound is not a > constant, division is still avoided, because prandom_u32_max() uses > a faster multiplication-based trick instead. > > - By using get_random_u16() or get_random_u8() in cases where the return > value is intended to indeed be a u16 or a u8, we waste fewer batched > random bytes, and hence have higher throughput. > > So, based on those rules and benefits from following them, this patchset > breaks down into the following five steps: > > 1) Replace `prandom_u32() % max` and variants thereof with > prandom_u32_max(max). > > * Part 1 is done with Coccinelle. Part 2 is done by hand. > > 2) Replace `(type)get_random_u32()` and variants thereof with > get_random_u16() or get_random_u8(). I took the pains to actually > look and see what every lvalue type was across the entire tree. > > * Part 1 is done with Coccinelle. Part 2 is done by hand. > > 3) Replace remaining deprecated uses of prandom_u32() and > get_random_int() with get_random_u32(). > > * A boring search and replace operation. > > 4) Replace remaining deprecated uses of prandom_bytes() with > get_random_bytes(). > > * A boring search and replace operation. > > 5) Remove the deprecated and now-unused prandom_u32() and > prandom_bytes() inline wrapper functions. > > * Just deleting code and updating comments. > > I'll be sending this toward the end of the 6.1 merge window via the > random.git tree. > > Please take a look! The number of lines touched is quite small, so this > should be reviewable, and as much as is possible has been pushed into > Coccinelle scripts. > > Thanks, > Jason > > Cc: Andreas Noever > Cc: Andrew Morton > Cc: Andy Shevchenko > Cc: Borislav Petkov > Cc: Catalin Marinas > Cc: Christoph Böhmwalder > Cc: Christoph Hellwig > Cc: Christophe Leroy > Cc: Daniel Borkmann > Cc: Dave Airlie > Cc: Dave Hansen > Cc: David S. Miller > Cc: Eric Dumazet > Cc: Florian Westphal > Cc: Greg Kroah-Hartman , > Cc: H. Peter Anvin > Cc: Heiko Carstens > Cc: Helge Deller > Cc: Herbert Xu > Cc: Huacai Chen > Cc: Hugh Dickins > Cc: Jakub Kicinski > Cc: James E.J. Bottomley > Cc: Jan Kara > Cc: Jason Gunthorpe > Cc: Jens Axboe > Cc: Johannes Berg > Cc: Jonathan Corbet > Cc: Jozsef Kadlecsik > Cc: KP Singh > Cc: Kees Cook > Cc: Marco Elver > Cc: Mauro Carvalho Chehab > Cc: Michael Ellerman > Cc: Pablo Neira Ayuso > Cc: Paolo Abeni > Cc: Peter Zijlstra > Cc: Richard Weinberger > Cc: Russell King > Cc: Theodore Ts'o > Cc: Thomas Bogendoerfer > Cc: Thomas Gleixner > Cc: Thomas Graf > Cc: Ulf Hansson > Cc: Vignesh Raghavendra > Cc: WANG Xuerui > Cc: Will Deacon > Cc: Yury Norov > Cc: dri-devel@lists.freedesktop.org > Cc: kasan-dev@googlegroups.com > Cc: kernel-janitors@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-block@vger.kernel.org > Cc: linux-crypto@vger.kernel.org > Cc: linux-doc@vger.kernel.org > Cc: linux-fsdevel@vger.kernel.org > Cc: linux-media@vger.kernel.org > Cc: linux-mips@vger.kernel.org > Cc: linux-mm@kvack.org > Cc: linux-mmc@vger.kernel.org > Cc: linux-mtd@lists.infradead.org > Cc: linux-nvme@lists.infradead.org > Cc: linux-parisc@vger.kernel.org > Cc: linux-rdma@vger.kernel.org > Cc: linux-s390@vger.kernel.org > Cc: linux-um@lists.infradead.org > Cc: linux-usb@vger.kernel.org > Cc: linux-wireless@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: loongarch@lists.linux.dev > Cc: netdev@vger.kernel.org > Cc: sparclinux@vger.kernel.org > Cc: x86@kernel.org > > Jason A. Donenfeld (7): > treewide: use prandom_u32_max() when possible, part 1 > treewide: use prandom_u32_max() when possible, part 2 > treewide: use get_random_{u8,u16}() when possible, part 1 > treewide: use get_random_{u8,u16}() when possible, part 2 > treewide: use get_random_u32() when possible > treewide: use get_random_bytes() when possible > prandom: remove unused functions > > Documentation/networking/filter.rst | 2 +- > arch/arm/kernel/process.c | 2 +- > arch/arm/kernel/signal.c | 2 +- > arch/arm64/kernel/process.c | 2 +- > arch/arm64/kernel/syscall.c | 2 +- > arch/loongarch/kernel/process.c | 2 +- > arch/loongarch/kernel/vdso.c | 2 +- > arch/mips/kernel/process.c | 2 +- > arch/mips/kernel/vdso.c | 2 +- > arch/parisc/kernel/process.c | 2 +- > arch/parisc/kernel/sys_parisc.c | 4 +- > arch/parisc/kernel/vdso.c | 2 +- > arch/powerpc/crypto/crc-vpmsum_test.c | 2 +- > arch/powerpc/kernel/process.c | 2 +- > arch/s390/kernel/process.c | 4 +- > arch/s390/kernel/vdso.c | 2 +- > arch/s390/mm/mmap.c | 2 +- > arch/sparc/vdso/vma.c | 2 +- > arch/um/kernel/process.c | 2 +- > arch/x86/entry/vdso/vma.c | 2 +- > arch/x86/kernel/cpu/amd.c | 2 +- > arch/x86/kernel/module.c | 2 +- > arch/x86/kernel/process.c | 2 +- > arch/x86/mm/pat/cpa-test.c | 4 +- > block/blk-crypto-fallback.c | 2 +- > crypto/async_tx/raid6test.c | 2 +- > crypto/testmgr.c | 94 +++++++++---------- > drivers/block/drbd/drbd_receiver.c | 4 +- > drivers/char/random.c | 11 +-- > drivers/dma/dmatest.c | 2 +- > .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- > drivers/gpu/drm/i915/i915_gem_gtt.c | 6 +- > .../gpu/drm/i915/selftests/i915_selftest.c | 2 +- > drivers/gpu/drm/tests/drm_buddy_test.c | 2 +- > drivers/gpu/drm/tests/drm_mm_test.c | 2 +- > drivers/infiniband/core/cma.c | 2 +- > drivers/infiniband/hw/cxgb4/cm.c | 4 +- > drivers/infiniband/hw/cxgb4/id_table.c | 4 +- > drivers/infiniband/hw/hfi1/tid_rdma.c | 2 +- > drivers/infiniband/hw/hns/hns_roce_ah.c | 5 +- > drivers/infiniband/hw/mlx4/mad.c | 2 +- > drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +- > drivers/infiniband/ulp/rtrs/rtrs-clt.c | 3 +- > drivers/md/bcache/request.c | 2 +- > drivers/md/raid5-cache.c | 2 +- > drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 2 +- > .../media/test-drivers/vivid/vivid-radio-rx.c | 4 +- > .../test-drivers/vivid/vivid-touch-cap.c | 6 +- > drivers/misc/habanalabs/gaudi2/gaudi2.c | 2 +- > drivers/mmc/core/core.c | 4 +- > drivers/mmc/host/dw_mmc.c | 2 +- > drivers/mtd/nand/raw/nandsim.c | 8 +- > drivers/mtd/tests/mtd_nandecctest.c | 12 +-- > drivers/mtd/tests/speedtest.c | 2 +- > drivers/mtd/tests/stresstest.c | 19 +--- > drivers/mtd/ubi/debug.c | 2 +- > drivers/mtd/ubi/debug.h | 6 +- > drivers/net/bonding/bond_main.c | 2 +- > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- > drivers/net/ethernet/broadcom/cnic.c | 5 +- > .../chelsio/inline_crypto/chtls/chtls_cm.c | 4 +- > .../chelsio/inline_crypto/chtls/chtls_io.c | 4 +- > drivers/net/ethernet/rocker/rocker_main.c | 8 +- > drivers/net/hamradio/baycom_epp.c | 2 +- > drivers/net/hamradio/hdlcdrv.c | 2 +- > drivers/net/hamradio/yam.c | 2 +- > drivers/net/phy/at803x.c | 2 +- > drivers/net/wireguard/selftest/allowedips.c | 16 ++-- > .../broadcom/brcm80211/brcmfmac/p2p.c | 2 +- > .../broadcom/brcm80211/brcmfmac/pno.c | 2 +- > .../net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 2 +- > .../net/wireless/marvell/mwifiex/cfg80211.c | 4 +- > .../wireless/microchip/wilc1000/cfg80211.c | 2 +- > .../net/wireless/quantenna/qtnfmac/cfg80211.c | 2 +- > drivers/net/wireless/st/cw1200/wsm.c | 2 +- > drivers/net/wireless/ti/wlcore/main.c | 2 +- > drivers/nvme/common/auth.c | 2 +- > drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 4 +- > drivers/scsi/fcoe/fcoe_ctlr.c | 4 +- > drivers/scsi/lpfc/lpfc_hbadisc.c | 6 +- > drivers/scsi/qedi/qedi_main.c | 2 +- > drivers/target/iscsi/cxgbit/cxgbit_cm.c | 2 +- > drivers/thunderbolt/xdomain.c | 2 +- > drivers/video/fbdev/uvesafb.c | 2 +- > fs/ceph/inode.c | 2 +- > fs/ceph/mdsmap.c | 2 +- > fs/exfat/inode.c | 2 +- > fs/ext2/ialloc.c | 3 +- > fs/ext4/ialloc.c | 7 +- > fs/ext4/ioctl.c | 4 +- > fs/ext4/mmp.c | 2 +- > fs/ext4/super.c | 7 +- > fs/f2fs/gc.c | 2 +- > fs/f2fs/namei.c | 2 +- > fs/f2fs/segment.c | 8 +- > fs/fat/inode.c | 2 +- > fs/nfsd/nfs4state.c | 4 +- > fs/ntfs3/fslog.c | 6 +- > fs/ubifs/debug.c | 10 +- > fs/ubifs/journal.c | 2 +- > fs/ubifs/lpt_commit.c | 14 +-- > fs/ubifs/tnc_commit.c | 2 +- > fs/xfs/libxfs/xfs_alloc.c | 2 +- > fs/xfs/libxfs/xfs_ialloc.c | 4 +- > fs/xfs/xfs_error.c | 2 +- > fs/xfs/xfs_icache.c | 2 +- > fs/xfs/xfs_log.c | 2 +- > include/linux/nodemask.h | 2 +- > include/linux/prandom.h | 12 --- > include/linux/random.h | 5 - > include/net/netfilter/nf_queue.h | 2 +- > include/net/red.h | 2 +- > include/net/sock.h | 2 +- > kernel/bpf/bloom_filter.c | 2 +- > kernel/bpf/core.c | 6 +- > kernel/bpf/hashtab.c | 2 +- > kernel/bpf/verifier.c | 2 +- > kernel/kcsan/selftest.c | 4 +- > kernel/locking/test-ww_mutex.c | 4 +- > kernel/time/clocksource.c | 2 +- > lib/cmdline_kunit.c | 4 +- > lib/fault-inject.c | 2 +- > lib/find_bit_benchmark.c | 4 +- > lib/kobject.c | 2 +- > lib/random32.c | 4 +- > lib/reed_solomon/test_rslib.c | 12 +-- > lib/sbitmap.c | 4 +- > lib/test-string_helpers.c | 2 +- > lib/test_fprobe.c | 2 +- > lib/test_hexdump.c | 10 +- > lib/test_kasan.c | 6 +- > lib/test_kprobes.c | 2 +- > lib/test_list_sort.c | 2 +- > lib/test_min_heap.c | 6 +- > lib/test_objagg.c | 2 +- > lib/test_rhashtable.c | 6 +- > lib/test_vmalloc.c | 19 +--- > lib/uuid.c | 2 +- > mm/migrate.c | 2 +- > mm/shmem.c | 2 +- > mm/slab.c | 2 +- > mm/slub.c | 2 +- > net/802/garp.c | 2 +- > net/802/mrp.c | 2 +- > net/ceph/mon_client.c | 2 +- > net/ceph/osd_client.c | 2 +- > net/core/neighbour.c | 2 +- > net/core/pktgen.c | 47 +++++----- > net/core/stream.c | 2 +- > net/dccp/ipv4.c | 4 +- > net/ipv4/datagram.c | 2 +- > net/ipv4/igmp.c | 6 +- > net/ipv4/inet_connection_sock.c | 2 +- > net/ipv4/inet_hashtables.c | 2 +- > net/ipv4/ip_output.c | 2 +- > net/ipv4/route.c | 4 +- > net/ipv4/tcp_cdg.c | 2 +- > net/ipv4/tcp_ipv4.c | 4 +- > net/ipv4/udp.c | 2 +- > net/ipv6/addrconf.c | 8 +- > net/ipv6/ip6_flowlabel.c | 2 +- > net/ipv6/mcast.c | 10 +- > net/ipv6/output_core.c | 2 +- > net/mac80211/rc80211_minstrel_ht.c | 2 +- > net/mac80211/scan.c | 2 +- > net/netfilter/ipvs/ip_vs_conn.c | 2 +- > net/netfilter/ipvs/ip_vs_twos.c | 4 +- > net/netfilter/nf_nat_core.c | 4 +- > net/netfilter/xt_statistic.c | 2 +- > net/openvswitch/actions.c | 2 +- > net/packet/af_packet.c | 2 +- > net/rds/bind.c | 2 +- > net/sched/act_gact.c | 2 +- > net/sched/act_sample.c | 2 +- > net/sched/sch_cake.c | 8 +- > net/sched/sch_netem.c | 22 ++--- > net/sched/sch_pie.c | 2 +- > net/sched/sch_sfb.c | 2 +- > net/sctp/socket.c | 4 +- > net/sunrpc/auth_gss/gss_krb5_wrap.c | 4 +- > net/sunrpc/cache.c | 2 +- > net/sunrpc/xprt.c | 2 +- > net/sunrpc/xprtsock.c | 2 +- > net/tipc/socket.c | 2 +- > net/unix/af_unix.c | 2 +- > net/xfrm/xfrm_state.c | 2 +- > 186 files changed, 379 insertions(+), 422 deletions(-) > Hi, Jason: There is a lot of code using "prandom_u32 % 4" in crypto's kernel self-test file testmgr.c, can you modify it together? Thanks, Longfang.