From: sashiko-bot@kernel.org
To: "Filippo Storniolo" <fstornio@redhat.com>
Cc: linux-can@vger.kernel.org, "Vincent Mailhol" <mailhol@kernel.org>,
"Marc Kleine-Budde" <mkl@pengutronix.de>,
"Oliver Hartkopp" <socketcan@hartkopp.net>,
"Oleksij Rempel" <o.rempel@pengutronix.de>
Subject: Re: [PATCH can-next 3/3] can: add can diag interface
Date: Wed, 10 Jun 2026 17:38:11 +0000 [thread overview]
Message-ID: <20260610173811.CF3BA1F00898@smtp.kernel.org> (raw)
In-Reply-To: <20260610-feat-can-diag-v1-3-021e3f1631a0@redhat.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The `can_diag` module fails to enforce a dependency on the core `can` module, leading to a crash when locking an uninitialized mutex.
- [Medium] Binary structures are embedded directly inside Netlink attributes, violating Netlink design rules.
--
commit 058ea09f4025994f935c1bd793eb19a873974e20
Author: Filippo Storniolo <fstornio@redhat.com>
can: add can diag interface
Add the can_diag interface for querying sockets from userspace.
ss(8) tool can use this interface to list open sockets. The userspace ABI
is defined in <linux/can_diag.h> and includes netlink request and response
structs.
> diff --git a/include/uapi/linux/can/diag.h b/include/uapi/linux/can/diag.h
> new file mode 100644
> index 0000000000000..7f99f85c42425
> --- /dev/null
> +++ b/include/uapi/linux/can/diag.h
[ ... ]
> +struct can_diag_j1939_addr {
> + __u64 name;
> + __u32 pgn;
> + __u8 addr;
> +};
[Severity: Medium]
Does this violate the Netlink subsystem design guidelines?
The Netlink documentation states to avoid binary structures inside attributes
and suggests breaking each member into its own attribute.
Also, does this structure have implicit trailing padding? Without explicit
padding after the 1-byte field, we might run into architecture-dependent size
differences, breaking 32-bit vs 64-bit compatibility.
[ ... ]
> diff --git a/net/can/diag.c b/net/can/diag.c
> new file mode 100644
> index 0000000000000..eb623ed118af5
> --- /dev/null
> +++ b/net/can/diag.c
[ ... ]
> + case CAN_J1939:
> + {
> + struct can_diag_j1939_addr j1939_addr;
> +
> + memset(&j1939_addr, 0, sizeof(j1939_addr));
> +
> + j1939_addr.name = can_addr.can_addr.j1939.name;
> + j1939_addr.pgn = can_addr.can_addr.j1939.pgn;
> + j1939_addr.addr = can_addr.can_addr.j1939.addr;
> +
> + err = nla_put(skb, CAN_DIAG_J1939_ADDR, sizeof(struct can_diag_j1939_addr),
> + &j1939_addr);
[Severity: Medium]
Does this directly write the binary struct into the Netlink message attribute?
The Netlink guidelines discourage putting binary structs into attributes for
new families.
[ ... ]
> +static int can_diag_dump(struct sk_buff *skb, struct netlink_callback *cb)
> +{
> + int num = 0, s_num = cb->args[0];
> + struct can_diag_req *req;
> + struct net *net;
> + struct sock *sk;
> +
> + net = sock_net(skb->sk);
> + req = nlmsg_data(cb->nlh);
> +
> + mutex_lock(&net->can.sklist_lock);
[Severity: High]
Can this attempt to lock an uninitialized mutex?
Since can_diag.ko does not call any exported symbols from can.ko, the kernel
module loader will not enforce a load dependency between them. If a userspace
tool queries CAN sockets, the kernel might autoload can_diag.ko without loading
can.ko.
Because can.ko is responsible for registering the pernet operations that
initialize net->can.sklist_lock, can_diag_dump() could end up calling
mutex_lock() on a zeroed, uninitialized mutex, leading to lockdep warnings
or crashes.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260610-feat-can-diag-v1-0-021e3f1631a0@redhat.com?part=3
prev parent reply other threads:[~2026-06-10 17:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-10 17:24 [PATCH can-next 0/3] Introduce diag support for CAN Filippo Storniolo
2026-06-10 17:24 ` [PATCH can-next 1/3] af_can: ensure sk_protocol is always set on socket creation Filippo Storniolo
2026-06-10 17:24 ` [PATCH can-next 2/3] af_can: store socket pointers in struct netns_can Filippo Storniolo
2026-06-10 17:24 ` [PATCH can-next 3/3] can: add can diag interface Filippo Storniolo
2026-06-10 17:38 ` sashiko-bot [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260610173811.CF3BA1F00898@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=fstornio@redhat.com \
--cc=linux-can@vger.kernel.org \
--cc=mailhol@kernel.org \
--cc=mkl@pengutronix.de \
--cc=o.rempel@pengutronix.de \
--cc=sashiko-reviews@lists.linux.dev \
--cc=socketcan@hartkopp.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.