From: Leon Hwang <leon.hwang@linux.dev>
To: bot+bpf-ci@kernel.org, bpf@vger.kernel.org
Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@kernel.org,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
eddyz87@gmail.com, memxor@gmail.com, martin.lau@linux.dev,
song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org,
emil@etsalapatis.com, ihor.solodrai@linux.dev, hawk@kernel.org,
john.fastabend@gmail.com, sdf@fomichev.me, rostedt@goodmis.org,
mhiramat@kernel.org, mathieu.desnoyers@efficios.com,
shuah@kernel.org, kuniyu@google.com, liuhangbin@gmail.com,
mkarsten@uwaterloo.ca, masashi.honma@gmail.com,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org, martin.lau@kernel.org,
mason@kernel.org
Subject: Re: [PATCH bpf-next 2/6] bpf: Add syscall common attrs support for xdp link_create
Date: Mon, 19 Oct 2026 00:30:33 +0800 [thread overview]
Message-ID: <96dd8e4e-2783-4616-8c68-9d89151a0cad@linux.dev> (raw)
In-Reply-To: <41c7d03fa06bd4e9439560fac5b3cf4d170b96b5c23946da8a3449e05c482b38@mail.kernel.org>
On 2026/10/17 23:03, bot+bpf-ci@kernel.org wrote:
>> bpf: Add syscall common attrs support for xdp link_create
>
> TL;DR:
> - bpf_log(log, extack._msg) in bpf_xdp_link_attach() may dereference NULL when
> no extack message is set
> - bpf_log() may be an undefined reference when CONFIG_BPF_SYSCALL=n
>
>> diff --git a/net/core/dev.c b/net/core/dev.c
>> index 18dc88990510..fdc1de21f358 100644
>> --- a/net/core/dev.c
>> +++ b/net/core/dev.c
>
> [ ... ]
>
>> @@ -10784,6 +10786,7 @@ int bpf_xdp_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
>> dev = dev_get_by_index(net, attr->link_create.target_ifindex);
>> if (!dev) {
>> rtnl_unlock();
>> + bpf_log(log, "Invalid target_ifindex.\n");
>> return -EINVAL;
>> }
>>
>
> Can this fail to link when CONFIG_BPF_SYSCALL is not set?
>
> bpf_xdp_link_attach() is built whenever CONFIG_NET=y, but bpf_log() lives in
> kernel/bpf/log.c, which kernel/bpf/Makefile only builds under
> CONFIG_BPF_SYSCALL:
>
> obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o ... log.o ...
>
> include/linux/bpf_verifier.h declares bpf_log() with no stub for the
> !CONFIG_BPF_SYSCALL case, and CONFIG_NET only does "select BPF". A config
> with CONFIG_NET=y and CONFIG_BPF_SYSCALL=n looks like it would end with an
> undefined reference to bpf_log from both of the new calls in this function.
>
> include/linux/bpf.h provides static inline stubs for bpf_link_init(),
> bpf_link_prime(), bpf_link_settle() and bpf_link_cleanup() so that this
> function builds without the bpf() syscall.
>
> Should bpf_log() get a similar stub, or should the calls be guarded with
> IS_ENABLED(CONFIG_BPF_SYSCALL)? None of the later patches in the series add
> a stub or change the Makefile.
Will add a stub bpf_log() when CONFIG_BPF_SYSCALL is not set.>
> [ ... ]
>
>> @@ -10812,6 +10815,7 @@ int bpf_xdp_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
>> if (err) {
>> link->dev = NULL;
>> bpf_link_cleanup(&link_primer);
>> + bpf_log(log, extack._msg);
>> trace_bpf_xdp_link_attach_failed(extack._msg);
>> goto out_put_dev;
>> }
>
> Can extack._msg be NULL here?
>
> extack is zero-initialised (struct netlink_ext_ack extack = {};), and _msg
> stays NULL whenever dev_xdp_attach_link() fails without anyone calling
> NL_SET_ERR_MSG(). Many ndo_bpf implementations do exactly that. For
> example, ixgbe_xdp() -> ixgbe_xdp_setup() has several -EINVAL and -ENOMEM
> returns that don't set an extack message, and mlx5e_xdp_set() ->
> mlx5e_xdp_allowed() returns -EINVAL with only a netdev_warn().
>
> If the caller passed BPF_COMMON_ATTRS with log_level != 0
> (bpf_verifier_log_attr_valid() accepts log_level=1 even with a NULL log_buf
> and a log_size of 0), bpf_verifier_log_needed() is true and the call chain
> becomes:
>
> bpf_log(log, NULL)
> -> bpf_verifier_vlog(log, NULL, args)
> -> vscnprintf(log->kbuf, BPF_VERIFIER_TMP_LOG_SIZE, NULL, args)
> -> vsnprintf() /* while (*fmt.str) with fmt.str == NULL */
>
> which dereferences NULL. The tracepoint on the next line copes with NULL
> because __assign_str() substitutes a placeholder string, and the netlink ack
> path also checks extack->_msg, so this new bpf_log() call looks like the only
> consumer without a NULL check.
>
> Passing the message as the format string also means a '%' in an extack
> message would be interpreted as a conversion, and unlike the other bpf_log()
> messages in link_create(), this one has no trailing newline. Would
> something like this be better?
>
> if (extack._msg)
> bpf_log(log, "%s\n", extack._msg);
Will change to this.
Thanks,
Leon
> [...]
next prev parent reply other threads:[~2026-10-18 16:30 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-17 14:26 [PATCH bpf-next 0/6] bpf: Add syscall common attrs support for xdp link_create Leon Hwang
2026-10-17 14:26 ` [PATCH bpf-next 1/6] bpf: Add syscall common attrs support for link_create Leon Hwang
2026-10-17 14:39 ` sashiko-bot
2026-10-18 16:28 ` Leon Hwang
2026-10-17 14:26 ` [PATCH bpf-next 2/6] bpf: Add syscall common attrs support for xdp link_create Leon Hwang
2026-10-17 14:48 ` sashiko-bot
2026-10-18 16:32 ` Leon Hwang
2026-10-17 15:03 ` bot+bpf-ci
2026-10-18 16:30 ` Leon Hwang [this message]
2026-10-18 3:28 ` kernel test robot
2026-10-18 16:29 ` Leon Hwang
2026-10-18 3:46 ` kernel test robot
2026-10-18 16:29 ` Leon Hwang
2026-10-17 14:26 ` [PATCH bpf-next 3/6] bpf: Retire tracepoint bpf_xdp_link_attach_failed Leon Hwang
2026-10-17 14:26 ` [PATCH bpf-next 4/6] libbpf: Factor out __bpf_sys_fd helper Leon Hwang
2026-10-17 14:53 ` bot+bpf-ci
2026-10-18 16:32 ` Leon Hwang
2026-10-17 14:26 ` [PATCH bpf-next 5/6] libbpf: Add bpf_link_create_log API Leon Hwang
2026-10-17 14:43 ` sashiko-bot
2026-10-18 16:33 ` Leon Hwang
2026-10-17 15:03 ` bot+bpf-ci
2026-10-18 16:33 ` Leon Hwang
2026-10-17 14:26 ` [PATCH bpf-next 6/6] selftests/bpf: Add tests to verify link_create logs Leon Hwang
2026-10-17 15:02 ` bot+bpf-ci
2026-10-18 16:33 ` Leon Hwang
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=96dd8e4e-2783-4616-8c68-9d89151a0cad@linux.dev \
--to=leon.hwang@linux.dev \
--cc=andrew+netdev@lunn.ch \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bot+bpf-ci@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@kernel.org \
--cc=emil@etsalapatis.com \
--cc=hawk@kernel.org \
--cc=horms@kernel.org \
--cc=ihor.solodrai@linux.dev \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=liuhangbin@gmail.com \
--cc=martin.lau@kernel.org \
--cc=martin.lau@linux.dev \
--cc=masashi.honma@gmail.com \
--cc=mason@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=memxor@gmail.com \
--cc=mhiramat@kernel.org \
--cc=mkarsten@uwaterloo.ca \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rostedt@goodmis.org \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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.