From: Jiayuan Chen <jiayuan.chen@linux.dev>
To: bpf@vger.kernel.org, netdev@vger.kernel.org
Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
ricardo@marliere.net, jiayuan.chen@linux.dev,
viro@zeniv.linux.org.uk, dmantipov@yandex.ru,
aleksander.lobakin@intel.com, linux-ppp@vger.kernel.org,
linux-kernel@vger.kernel.org, mrpre@163.com,
syzbot+853242d9c9917165d791@syzkaller.appspotmail.com
Subject: [PATCH net-next v3 1/1] ppp: Fix KMSAN warning by initializing 2-byte header
Date: Sat, 22 Feb 2025 17:25:56 +0800 [thread overview]
Message-ID: <20250222092556.274267-2-jiayuan.chen@linux.dev> (raw)
In-Reply-To: <20250222092556.274267-1-jiayuan.chen@linux.dev>
The PPP driver adds an extra 2-byte header to enable socket filters to run
correctly. However, the driver only initializes the first byte, which
indicates the direction. For normal BPF programs, this is not a problem
since they only read the first byte.
Nevertheless, for carefully crafted BPF programs, if they read the second
byte, this will trigger a KMSAN warning for reading uninitialized data.
Reported-by: syzbot+853242d9c9917165d791@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/bpf/000000000000dea025060d6bc3bc@google.com/
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
---
drivers/net/ppp/ppp_generic.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index 4583e15ad03a..29a7a21cb096 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -1762,10 +1762,17 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
if (proto < 0x8000) {
#ifdef CONFIG_PPP_FILTER
- /* check if we should pass this packet */
- /* the filter instructions are constructed assuming
- a four-byte PPP header on each packet */
- *(u8 *)skb_push(skb, 2) = 1;
+ /* Check if we should pass this packet.
+ * The filter instructions are constructed assuming
+ * a four-byte PPP header on each packet. The first byte
+ * indicates the direction, and the second byte is meaningless,
+ * but we still need to initialize it to prevent crafted BPF
+ * programs from reading them which would cause reading of
+ * uninitialized data.
+ */
+ skb_push(skb, 2);
+ skb->data[0] = 1;
+ skb->data[1] = 0;
if (ppp->pass_filter &&
bpf_prog_run(ppp->pass_filter, skb) == 0) {
if (ppp->debug & 1)
--
2.47.1
prev parent reply other threads:[~2025-02-22 9:26 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-22 9:25 [PATCH net-next v3 0/1] ppp: Fix KMSAN uninit-value warning with bpf Jiayuan Chen
2025-02-22 9:25 ` Jiayuan Chen [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=20250222092556.274267-2-jiayuan.chen@linux.dev \
--to=jiayuan.chen@linux.dev \
--cc=aleksander.lobakin@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=bpf@vger.kernel.org \
--cc=davem@davemloft.net \
--cc=dmantipov@yandex.ru \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-ppp@vger.kernel.org \
--cc=mrpre@163.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=ricardo@marliere.net \
--cc=syzbot+853242d9c9917165d791@syzkaller.appspotmail.com \
--cc=viro@zeniv.linux.org.uk \
/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.