netfilter: use get_random_u32 instead of prandom
authorFlorian Westphal <fw@strlen.de>
Wed, 18 May 2022 18:15:31 +0000 (20:15 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 8 Jun 2022 10:30:59 +0000 (12:30 +0200)
commitb1fd94e704571f98b21027340eecf821b2bdffba
treeccc6d92dc74c8fc91dc915f6b10adfb21a7e771c
parentf5826c8c9d57210a17031af5527056eefdc2b7eb
netfilter: use get_random_u32 instead of prandom

bh might occur while updating per-cpu rnd_state from user context,
ie. local_out path.

BUG: using smp_processor_id() in preemptible [00000000] code: nginx/2725
caller is nft_ng_random_eval+0x24/0x54 [nft_numgen]
Call Trace:
 check_preemption_disabled+0xde/0xe0
 nft_ng_random_eval+0x24/0x54 [nft_numgen]

Use the random driver instead, this also avoids need for local prandom
state. Moreover, prandom now uses the random driver since d4150779e60f
("random32: use real rng for non-deterministic randomness").

Based on earlier patch from Pablo Neira.

Fixes: 6b2faee0ca91 ("netfilter: nft_meta: place prandom handling in a helper")
Fixes: 978d8f9055c3 ("netfilter: nft_numgen: add map lookups for numgen random operations")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nft_meta.c
net/netfilter/nft_numgen.c