BPF List
 help / color / mirror / Atom feed
From: Leon Hwang <leon.hwang@linux.dev>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: bpf@vger.kernel.org, ast@kernel.org, andrii@kernel.org,
	daniel@iogearbox.net, menglong8.dong@gmail.com
Subject: Re: [RFC PATCH bpf-next v2 1/6] bpf: Extend bpf syscall with common attributes support
Date: Tue, 23 Sep 2025 23:23:13 +0800	[thread overview]
Message-ID: <1e96aece-794e-4d50-91d9-9a46bc1e365e@linux.dev> (raw)
In-Reply-To: <CAEf4BzZAb1RFpJFLJLWLyV-r=yrKj1_tpjk1MSvx=uHC_DG=aA@mail.gmail.com>



On 2025/9/17 08:06, Andrii Nakryiko wrote:
> On Thu, Sep 11, 2025 at 9:33 AM Leon Hwang <leon.hwang@linux.dev> wrote:
>>
>> This patch extends the 'bpf()' syscall to support a set of common
>> attributes shared across all BPF commands:
>>
>> 1. 'log_buf': User-provided buffer for storing logs
>> 2. 'log_size': Size of the log buffer
>> 3. 'log_level': Log verbosity level
>>
>> These common attributes are passed as the 4th argument to the 'bpf()'
>> syscall, with the 5th argument specifying the size of this structure.
>>
>> To indicate the use of these common attributes from userspace, a new flag
>> 'BPF_COMMON_ATTRS' ('1 << 16') is introduced. This flag is OR-ed into the
>> 'cmd' field of the syscall.
>>
>> When 'cmd & BPF_COMMON_ATTRS' is set, the kernel will copy the common
>> attributes from userspace into kernel space for use.
>>
>> Signed-off-by: Leon Hwang <leon.hwang@linux.dev>
>> ---
>>  include/linux/syscalls.h       |  3 ++-
>>  include/uapi/linux/bpf.h       |  7 +++++++
>>  kernel/bpf/syscall.c           | 19 +++++++++++++++----
>>  tools/include/uapi/linux/bpf.h |  7 +++++++
>>  4 files changed, 31 insertions(+), 5 deletions(-)
>>
>> diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
>> index 77f45e5d44139..94408575dc49b 100644
>> --- a/include/linux/syscalls.h
>> +++ b/include/linux/syscalls.h
>> @@ -933,7 +933,8 @@ asmlinkage long sys_seccomp(unsigned int op, unsigned int flags,
>>  asmlinkage long sys_getrandom(char __user *buf, size_t count,
>>                               unsigned int flags);
>>  asmlinkage long sys_memfd_create(const char __user *uname_ptr, unsigned int flags);
>> -asmlinkage long sys_bpf(int cmd, union bpf_attr __user *attr, unsigned int size);
>> +asmlinkage long sys_bpf(int cmd, union bpf_attr __user *attr, unsigned int size,
>> +                       struct bpf_common_attr __user *attr_common, unsigned int size_common);
>>  asmlinkage long sys_execveat(int dfd, const char __user *filename,
>>                         const char __user *const __user *argv,
>>                         const char __user *const __user *envp, int flags);
>> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
>> index 233de8677382e..5014baccf065f 100644
>> --- a/include/uapi/linux/bpf.h
>> +++ b/include/uapi/linux/bpf.h
>> @@ -1474,6 +1474,13 @@ struct bpf_stack_build_id {
>>         };
>>  };
>>
>> +struct bpf_common_attr {
>> +       __u64 log_buf;
>> +       __u32 log_size;
>> +       __u32 log_level;
>> +};
>> +
>> +#define BPF_COMMON_ATTRS (1 << 16)
>
> add this into enum bpf_cmd after __MAX_BPF_CMD (with a small comment
> about the purpose of this)? That will keep everything cmd-related in
> one place
>

Ack.

>>  #define BPF_OBJ_NAME_LEN 16U
>>
>>  enum {
>> diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
>> index 3f178a0f8eb12..d49f822ceea12 100644
>> --- a/kernel/bpf/syscall.c
>> +++ b/kernel/bpf/syscall.c
>> @@ -5987,8 +5987,10 @@ static int prog_stream_read(union bpf_attr *attr)
>>         return ret;
>>  }
>>
>> -static int __sys_bpf(enum bpf_cmd cmd, bpfptr_t uattr, unsigned int size)
>> +static int __sys_bpf(enum bpf_cmd cmd, bpfptr_t uattr, unsigned int size,
>> +                    bpfptr_t uattr_common, unsigned int size_common)
>>  {
>> +       struct bpf_common_attr common_attrs;
>>         union bpf_attr attr;
>>         int err;
>>
>> @@ -6002,6 +6004,14 @@ static int __sys_bpf(enum bpf_cmd cmd, bpfptr_t uattr, unsigned int size)
>>         if (copy_from_bpfptr(&attr, uattr, size) != 0)
>>                 return -EFAULT;
>>
>> +       memset(&common_attrs, 0, sizeof(common_attrs));
>> +       if (cmd & BPF_COMMON_ATTRS) {
>> +               cmd &= ~BPF_COMMON_ATTRS;
>> +               size_common = min_t(u32, size_common, sizeof(common_attrs));
>> +               if (uattr_common.user && copy_from_bpfptr(&common_attrs, uattr_common, size_common))
>> +                       return -EFAULT;
>
> use bpf_check_uarg_tail_zero() for extra checks, just like we do for uattr
>

Ack.

Thanks,
Leon

  reply	other threads:[~2025-09-23 15:23 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-11 16:33 [RFC PATCH bpf-next v2 0/6] bpf: Extend bpf syscall with common attributes support Leon Hwang
2025-09-11 16:33 ` [RFC PATCH bpf-next v2 1/6] " Leon Hwang
2025-09-17  0:06   ` Andrii Nakryiko
2025-09-23 15:23     ` Leon Hwang [this message]
2025-09-11 16:33 ` [RFC PATCH bpf-next v2 2/6] libbpf: Add support for extended bpf syscall Leon Hwang
2025-09-17  0:06   ` Andrii Nakryiko
2025-09-23 15:36     ` Leon Hwang
2025-09-24 23:57       ` Andrii Nakryiko
2025-09-11 16:33 ` [RFC PATCH bpf-next v2 3/6] bpf: Add common attr support for prog_load and btf_load Leon Hwang
2025-09-17 21:12   ` Andrii Nakryiko
2025-09-23 15:50     ` Leon Hwang
2025-09-25  0:00       ` Andrii Nakryiko
2025-09-11 16:33 ` [RFC PATCH bpf-next v2 4/6] bpf: Add common attr support for map_create Leon Hwang
2025-09-17 21:39   ` Andrii Nakryiko
2025-09-17 21:49     ` Alexei Starovoitov
2025-09-23 15:52       ` Leon Hwang
2025-09-23 16:27     ` Leon Hwang
2025-09-18 23:29   ` Eduard Zingerman
2025-09-23 16:31     ` Leon Hwang
2025-09-11 16:33 ` [RFC PATCH bpf-next v2 5/6] libbpf: " Leon Hwang
2025-09-17 21:45   ` Andrii Nakryiko
2025-09-17 21:46     ` Andrii Nakryiko
2025-09-23 16:40       ` Leon Hwang
2025-09-25  0:02         ` Andrii Nakryiko
2025-09-11 16:33 ` [RFC PATCH bpf-next v2 6/6] selftests/bpf: Add cases to test map create failure log 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=1e96aece-794e-4d50-91d9-9a46bc1e365e@linux.dev \
    --to=leon.hwang@linux.dev \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=menglong8.dong@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox