[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 5.16 0941/1039] bpf: Fix mount source show for bpffs
    From: Yafang Shao <>

    commit 1e9d74660d4df625b0889e77018f9e94727ceacd upstream.

    We noticed our tc ebpf tools can't start after we upgrade our in-house kernel
    version from 4.19 to 5.10. That is because of the behaviour change in bpffs
    caused by commit d2935de7e4fd ("vfs: Convert bpf to use the new mount API").

    In our tc ebpf tools, we do strict environment check. If the environment is
    not matched, we won't allow to start the ebpf progs. One of the check is whether
    bpffs is properly mounted. The mount information of bpffs in kernel-4.19 and
    kernel-5.10 are as follows:

    - kernel 4.19
    $ mount -t bpf bpffs /sys/fs/bpf
    $ mount -t bpf
    bpffs on /sys/fs/bpf type bpf (rw,relatime)

    - kernel 5.10
    $ mount -t bpf bpffs /sys/fs/bpf
    $ mount -t bpf
    none on /sys/fs/bpf type bpf (rw,relatime)

    The device name in kernel-5.10 is displayed as none instead of bpffs, then our
    environment check fails. Currently we modify the tools to adopt to the kernel
    behaviour change, but I think we'd better change the kernel code to keep the
    behavior consistent.

    After this change, the mount information will be displayed the same with the
    behavior in kernel-4.19, for example:

    $ mount -t bpf bpffs /sys/fs/bpf
    $ mount -t bpf
    bpffs on /sys/fs/bpf type bpf (rw,relatime)

    Fixes: d2935de7e4fd ("vfs: Convert bpf to use the new mount API")
    Suggested-by: Daniel Borkmann <>
    Signed-off-by: Yafang Shao <>
    Signed-off-by: Daniel Borkmann <>
    Acked-by: Christian Brauner <>
    Cc: David Howells <>
    Cc: Al Viro <>
    Signed-off-by: Greg Kroah-Hartman <>
    kernel/bpf/inode.c | 14 ++++++++++++--
    1 file changed, 12 insertions(+), 2 deletions(-)

    --- a/kernel/bpf/inode.c
    +++ b/kernel/bpf/inode.c
    @@ -648,12 +648,22 @@ static int bpf_parse_param(struct fs_con
    int opt;

    opt = fs_parse(fc, bpf_fs_parameters, param, &result);
    - if (opt < 0)
    + if (opt < 0) {
    /* We might like to report bad mount options here, but
    * traditionally we've ignored all mount options, so we'd
    * better continue to ignore non-existing options for bpf.
    - return opt == -ENOPARAM ? 0 : opt;
    + if (opt == -ENOPARAM) {
    + opt = vfs_parse_fs_param_source(fc, param);
    + if (opt != -ENOPARAM)
    + return opt;
    + return 0;
    + }
    + if (opt < 0)
    + return opt;
    + }

    switch (opt) {
    case OPT_MODE:

     \ /
      Last update: 2022-01-24 23:48    [W:2.813 / U:2.864 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site