On Wed, Oct 05, 2022 at 11:48:41PM +0200, Jason A. Donenfeld wrote: > Rather than truncate a 32-bit value to a 16-bit value or an 8-bit value, > simply use the get_random_{u8,u16}() functions, which are faster than > wasting the additional bytes from a 32-bit value. > > Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx> Same question about "mechanism of transformation". > diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c > index ddfe9208529a..ac452a0111a9 100644 > --- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c > +++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c > @@ -1467,7 +1467,7 @@ static void make_established(struct sock *sk, u32 snd_isn, unsigned int opt) > tp->write_seq = snd_isn; > tp->snd_nxt = snd_isn; > tp->snd_una = snd_isn; > - inet_sk(sk)->inet_id = prandom_u32(); > + inet_sk(sk)->inet_id = get_random_u16(); > assign_rxopt(sk, opt); > > if (tp->rcv_wnd > (RCV_BUFSIZ_M << 10)) This one I had to go look at -- inet_id is u16, so yeah. :) > diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c > index 56ffaa8dd3f6..0131ed2cd1bd 100644 > --- a/lib/test_vmalloc.c > +++ b/lib/test_vmalloc.c > @@ -80,7 +80,7 @@ static int random_size_align_alloc_test(void) > int i; > > for (i = 0; i < test_loop_count; i++) { > - rnd = prandom_u32(); > + rnd = get_random_u8(); > > /* > * Maximum 1024 pages, if PAGE_SIZE is 4096. This wasn't obvious either, but it looks like it's because it never consumes more than u8? > diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c > index 7981be526f26..57c7686ac485 100644 > --- a/net/netfilter/nf_nat_core.c > +++ b/net/netfilter/nf_nat_core.c > @@ -468,7 +468,7 @@ static void nf_nat_l4proto_unique_tuple(struct nf_conntrack_tuple *tuple, > if (range->flags & NF_NAT_RANGE_PROTO_OFFSET) > off = (ntohs(*keyptr) - ntohs(range->base_proto.all)); > else > - off = prandom_u32(); > + off = get_random_u16(); > > attempts = range_size; Yup, u16 off; > diff --git a/net/sched/sch_sfb.c b/net/sched/sch_sfb.c > index 2829455211f8..7eb70acb4d58 100644 > --- a/net/sched/sch_sfb.c > +++ b/net/sched/sch_sfb.c > @@ -379,7 +379,7 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch, > goto enqueue; > } > > - r = prandom_u32() & SFB_MAX_PROB; > + r = get_random_u16() & SFB_MAX_PROB; > > if (unlikely(r < p_min)) { > if (unlikely(p_min > SFB_MAX_PROB / 2)) { include/uapi/linux/pkt_sched.h:#define SFB_MAX_PROB 0xFFFF Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> -- Kees Cook