drivers/net/netdevsim/psample.c | 4 ++-- net/ceph/auth_x.c | 2 +- net/core/net_namespace.c | 2 +- net/mac80211/mesh_plink.c | 2 +- net/mptcp/subflow.c | 4 ++-- net/openvswitch/flow_table.c | 2 +- net/sctp/sm_make_chunk.c | 4 ++-- net/tipc/node.c | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-)
Use the typed random integer helpers instead of
get_random_bytes() when filling a single integer variable.
The helpers return the value directly, require no pointer
or size argument, and better express intent.
Skipped sites writing into __be16 fields (netdevsim) where
a direct assignment would trigger sparse endianness warnings.
Signed-off-by: David Carlier <devnexen@gmail.com>
---
drivers/net/netdevsim/psample.c | 4 ++--
net/ceph/auth_x.c | 2 +-
net/core/net_namespace.c | 2 +-
net/mac80211/mesh_plink.c | 2 +-
net/mptcp/subflow.c | 4 ++--
net/openvswitch/flow_table.c | 2 +-
net/sctp/sm_make_chunk.c | 4 ++--
net/tipc/node.c | 2 +-
8 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/net/netdevsim/psample.c b/drivers/net/netdevsim/psample.c
index 47d24bc64ee4..717d157c3ae2 100644
--- a/drivers/net/netdevsim/psample.c
+++ b/drivers/net/netdevsim/psample.c
@@ -94,7 +94,7 @@ static void nsim_dev_psample_md_prepare(const struct nsim_dev_psample *psample,
if (psample->out_tc_occ_max) {
u64 out_tc_occ;
- get_random_bytes(&out_tc_occ, sizeof(u64));
+ out_tc_occ = get_random_u64();
md->out_tc_occ = out_tc_occ & (psample->out_tc_occ_max - 1);
md->out_tc_occ_valid = 1;
}
@@ -102,7 +102,7 @@ static void nsim_dev_psample_md_prepare(const struct nsim_dev_psample *psample,
if (psample->latency_max) {
u64 latency;
- get_random_bytes(&latency, sizeof(u64));
+ latency = get_random_u64();
md->latency = latency & (psample->latency_max - 1);
md->latency_valid = 1;
}
diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
index 692e0b868822..936b43ae4a95 100644
--- a/net/ceph/auth_x.c
+++ b/net/ceph/auth_x.c
@@ -571,7 +571,7 @@ static int ceph_x_build_request(struct ceph_auth_client *ac,
blob = enc_buf + SHA256_DIGEST_SIZE;
}
- get_random_bytes(&auth->client_challenge, sizeof(u64));
+ auth->client_challenge = get_random_u64();
blob->client_challenge = auth->client_challenge;
blob->server_challenge = cpu_to_le64(xi->server_challenge);
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 1057d16d5dd2..deb8b2ec5674 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -411,7 +411,7 @@ static __net_init int preinit_net(struct net *net, struct user_namespace *user_n
ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt");
ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt");
- get_random_bytes(&net->hash_mix, sizeof(u32));
+ net->hash_mix = get_random_u32();
net->dev_base_seq = 1;
net->user_ns = user_ns;
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index 803106fc3134..7cbab90c8784 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -712,7 +712,7 @@ void mesh_plink_timer(struct timer_list *t)
"Mesh plink for %pM (retry, timeout): %d %d\n",
sta->sta.addr, sta->mesh->plink_retries,
sta->mesh->plink_timeout);
- get_random_bytes(&rand, sizeof(u32));
+ rand = get_random_u32();
sta->mesh->plink_timeout = sta->mesh->plink_timeout +
rand % sta->mesh->plink_timeout;
++sta->mesh->plink_retries;
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 5cfe19990f31..1a7736145dbc 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -72,7 +72,7 @@ static void subflow_req_create_thmac(struct mptcp_subflow_request_sock *subflow_
struct mptcp_sock *msk = subflow_req->msk;
u8 hmac[SHA256_DIGEST_SIZE];
- get_random_bytes(&subflow_req->local_nonce, sizeof(u32));
+ subflow_req->local_nonce = get_random_u32();
subflow_generate_hmac(READ_ONCE(msk->local_key),
READ_ONCE(msk->remote_key),
@@ -1639,7 +1639,7 @@ int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_pm_local *local,
ssk = sf->sk;
subflow = mptcp_subflow_ctx(ssk);
do {
- get_random_bytes(&subflow->local_nonce, sizeof(u32));
+ subflow->local_nonce = get_random_u32();
} while (!subflow->local_nonce);
/* if 'IPADDRANY', the ID will be set later, after the routing */
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index 61c6a5f77c2e..67d5b8c0fe79 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -167,7 +167,7 @@ static struct table_instance *table_instance_alloc(int new_size)
ti->n_buckets = new_size;
ti->node_ver = 0;
- get_random_bytes(&ti->hash_seed, sizeof(u32));
+ ti->hash_seed = get_random_u32();
return ti;
}
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
index 2c0017d058d4..de86ac088289 100644
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -2727,7 +2727,7 @@ __u32 sctp_generate_tag(const struct sctp_endpoint *ep)
__u32 x;
do {
- get_random_bytes(&x, sizeof(__u32));
+ x = get_random_u32();
} while (x == 0);
return x;
@@ -2738,7 +2738,7 @@ __u32 sctp_generate_tsn(const struct sctp_endpoint *ep)
{
__u32 retval;
- get_random_bytes(&retval, sizeof(__u32));
+ retval = get_random_u32();
return retval;
}
diff --git a/net/tipc/node.c b/net/tipc/node.c
index af442a5ef8f3..97aa970a0d83 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -1275,7 +1275,7 @@ void tipc_node_check_dest(struct net *net, u32 addr,
goto exit;
if_name = strchr(b->name, ':') + 1;
- get_random_bytes(&session, sizeof(u16));
+ session = get_random_u16();
if (!tipc_link_create(net, if_name, b->identity, b->tolerance,
b->net_plane, b->mtu, b->priority,
b->min_win, b->max_win, session,
--
2.53.0
Hi David,
Thank you for your modifications, that's great!
Our CI did some validations and here is its report:
- KVM Validation: normal (except selftest_mptcp_join): Success! ✅
- KVM Validation: normal (only selftest_mptcp_join): Success! ✅
- KVM Validation: debug (except selftest_mptcp_join): Success! ✅
- KVM Validation: debug (only selftest_mptcp_join): Success! ✅
- KVM Validation: btf-normal (only bpftest_all): Success! ✅
- KVM Validation: btf-debug (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/24029230954
Initiator: Matthieu Baerts (NGI0)
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/f63bbce96cab
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=1077452
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-normal
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
Hi David, On Mon, Apr 6, 2026 at 1:50 AM David Carlier <devnexen@gmail.com> wrote: > > Use the typed random integer helpers instead of > get_random_bytes() when filling a single integer variable. > The helpers return the value directly, require no pointer > or size argument, and better express intent. > > Skipped sites writing into __be16 fields (netdevsim) where > a direct assignment would trigger sparse endianness warnings. I don't believe that endian swapping significantly affects the randomness of the data returned, so either: 1. Do something to silence sparse (casts?) 2. Live with the endian swap overhead if they're not in the hot path. Other than that, Reviewed-by: Julian Calaby <julian.calaby@gmail.com> Thanks, -- Julian Calaby Email: julian.calaby@gmail.com Profile: http://www.google.com/profiles/julian.calaby/
Hi David, On 05/04/2026 17:48, David Carlier wrote: > Use the typed random integer helpers instead of > get_random_bytes() when filling a single integer variable. > The helpers return the value directly, require no pointer > or size argument, and better express intent. Regarding the modifications in net/mptcp, it looks good to me: Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> # net/mptcp > Skipped sites writing into __be16 fields (netdevsim) where > a direct assignment would trigger sparse endianness warnings. Note that the AI reviews are mentioning that auth->client_challenge from net/ceph/auth_x.c is declared as __le64, and it might then also cause sparse warnings: https://sashiko.dev/#/patchset/20260405154816.4774-1-devnexen%40gmail.com It looks like they are right: $ make C=1 net/ceph/auth_x.o net/ceph/auth_x.c:574:40: warning: incorrect type in assignment (different base types) net/ceph/auth_x.c:574:40: expected restricted __le64 [usertype] client_challenge net/ceph/auth_x.c:574:40: got unsigned long long Note that the Netdev CI currently doesn't check sparse warnings: https://github.com/linux-netdev/nipa/issues/76 Cheers, Matt -- Sponsored by the NGI0 Core fund.
Hi Mathieu yes this is indeed a valid point, will address is for next time. Cheers On Mon, 6 Apr 2026 at 15:13, Matthieu Baerts <matttbe@kernel.org> wrote: > > Hi David, > > On 05/04/2026 17:48, David Carlier wrote: > > Use the typed random integer helpers instead of > > get_random_bytes() when filling a single integer variable. > > The helpers return the value directly, require no pointer > > or size argument, and better express intent. > > Regarding the modifications in net/mptcp, it looks good to me: > > Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> # net/mptcp > > > Skipped sites writing into __be16 fields (netdevsim) where > > a direct assignment would trigger sparse endianness warnings. > > Note that the AI reviews are mentioning that auth->client_challenge from > net/ceph/auth_x.c is declared as __le64, and it might then also cause > sparse warnings: > > https://sashiko.dev/#/patchset/20260405154816.4774-1-devnexen%40gmail.com > > > It looks like they are right: > > $ make C=1 net/ceph/auth_x.o > net/ceph/auth_x.c:574:40: warning: incorrect type in assignment (different base types) > net/ceph/auth_x.c:574:40: expected restricted __le64 [usertype] client_challenge > net/ceph/auth_x.c:574:40: got unsigned long long > > > Note that the Netdev CI currently doesn't check sparse warnings: > > https://github.com/linux-netdev/nipa/issues/76 > > Cheers, > Matt > -- > Sponsored by the NGI0 Core fund. >
On Sun, Apr 05, 2026 at 04:48:16PM +0100, David Carlier wrote:
> Use the typed random integer helpers instead of
> get_random_bytes() when filling a single integer variable.
> The helpers return the value directly, require no pointer
> or size argument, and better express intent.
>
> Skipped sites writing into __be16 fields (netdevsim) where
> a direct assignment would trigger sparse endianness warnings.
>
> Signed-off-by: David Carlier <devnexen@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
© 2016 - 2026 Red Hat, Inc.