From: Jiri Olsa <jolsa@redhat.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>, Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
lkml <linux-kernel@vger.kernel.org>,
netdev@vger.kernel.org, linux-kbuild@vger.kernel.org,
Quentin Monnet <quentin.monnet@netronome.com>,
Eugene Syromiatnikov <esyr@redhat.com>,
Jiri Benc <jbenc@redhat.com>,
Stanislav Kozina <skozina@redhat.com>,
Jerome Marchand <jmarchan@redhat.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Masahiro Yamada <yamada.masahiro@socionext.com>,
Michal Marek <michal.lkml@markovi.net>,
Jiri Kosina <jkosina@suse.cz>
Subject: Re: [RFC 0/9] bpf: Add buildid check support
Date: Fri, 6 Apr 2018 17:07:36 +0200 [thread overview]
Message-ID: <20180406150736.GA13785@krava> (raw)
In-Reply-To: <20180406013719.ekptkxbwzpjeaanu@ast-mbp.dhcp.thefacebook.com>
On Thu, Apr 05, 2018 at 06:37:23PM -0700, Alexei Starovoitov wrote:
> On Thu, Apr 05, 2018 at 05:16:36PM +0200, Jiri Olsa wrote:
> > hi,
> > eBPF programs loaded for kprobes are allowed to read kernel
> > internal structures. We check the provided kernel version
> > to ensure that the program is loaded for the proper kernel.
> >
> > The problem is that the version check is not enough, because
> > it only follows the version setup from kernel's Makefile.
> > However, the internal kernel structures change based on the
> > .config data, so in practise we have different kernels with
> > same version.
> >
> > The eBPF kprobe program thus then get loaded for different
> > kernel than it's been built for, get wrong data (silently)
> > and provide misleading output.
> >
> > This patchset implements additional check in eBPF loading code
> > on provided build ID (from kernel's elf image, .notes section
> > GNU build ID) to ensure we load the eBPF program on correct
> > kernel.
> >
> > Also available in here (based on bpf-next/master):
> > https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
> > bpf/checksum
> >
> > This patchset consists of several changes:
> >
> > - adding CONFIG_BUILDID_H option that instructs the build
> > to generate uapi header file with build ID data, that
> > will be included by eBPF program
> >
> > - adding CONFIG_BPF_BUILDID_CHECK option and new bpf_attr
> > field to allow build ID checking when loading the eBPF
> > program
> >
> > - changing libbpf to read and pass build ID to the kernel
> >
> > - several small side fixes
> >
> > - example perf eBPF code in bpf-samples/bpf-stdout-example.c
> > to show the build ID support/usage.
> >
> > # perf record -vv -e ./bpf-samples/bpf-stdout-example.c kill 2>&1 | grep buildid
> > libbpf: section(7) buildid, size 21, link 0, flags 3, type=1
> > libbpf: kernel buildid of ./bpf-samples/bpf-stdout-example.c is: 6e25edeb408513184e2753bebad25d42314501a0
> >
> > The buildid is provided the same way we provide kernel
> > version, in a special "buildid" section:
> >
> > # cat ./bpf-samples/bpf-stdout-example.c
> > ...
> > #include <linux/buildid.h>
> >
> > char _buildid[] SEC("buildid") = LINUX_BUILDID_DATA;
> > ...
> >
> > where LINUX_BUILDID_DATA is defined in the generated buildid.h.
> >
> > please note it's an RFC ;-) any comments and suggestions are welcome
>
> I think this is overkill.
>
> We're very heavy users of kprobe+bpf. It's used for lots
> of different cases and usage is constantly growing,
> but I haven't seen a single case of :
>
> > The eBPF kprobe program thus then get loaded for different
> > kernel than it's been built for, get wrong data (silently)
> > and provide misleading output.
>
> but I saw plenty of the opposite. People pre-compile the program
> and hack kernel version when they load, since they know in advance
> that kprobe+bpf doesn't use any kernel specific things.
> The existing kernel version check for kprobe+bpf is already annoying
> to them.
perhaps verifier could detect this (via bpf_probe_read usage) and disable
the version check automaticaly for such program?
and in the same way force the version check (or buildid when enabled)
once the bpf_probe_read is detected
thanks,
jirka
prev parent reply other threads:[~2018-04-06 15:07 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-05 15:16 [RFC 0/9] bpf: Add buildid check support Jiri Olsa
2018-04-05 15:16 ` [PATCH 1/9] perf tools: Make read_build_id function public Jiri Olsa
2018-04-05 15:16 ` [PATCH 2/9] perf tools: Add fetch_kernel_buildid function Jiri Olsa
2018-04-05 15:16 ` [PATCH 3/9] kbuild: Do not pass arguments to link-vmlinux.sh Jiri Olsa
2018-04-05 15:50 ` Masahiro Yamada
2018-04-05 18:59 ` Jiri Olsa
2018-04-06 0:59 ` Masahiro Yamada
2018-04-06 16:54 ` Jiri Olsa
2018-04-05 15:16 ` [PATCH 4/9] kbuild: Add filechk2 function Jiri Olsa
2018-04-05 15:16 ` [PATCH 5/9] bpf: Add CONFIG_BUILDID_H option Jiri Olsa
2018-04-05 15:16 ` [PATCH 6/9] bpf: Add CONFIG_BPF_BUILDID_CHECK option Jiri Olsa
2018-04-05 15:16 ` [PATCH 7/9] libbpf: Synchronize uapi bpf.h header Jiri Olsa
2018-04-05 15:16 ` [PATCH 8/9] libbpf: Add support to attach buildid to program load Jiri Olsa
2018-04-05 15:16 ` [PATCH 9/9] perf tools: The buildid usage in example eBPF program Jiri Olsa
2018-04-06 1:37 ` [RFC 0/9] bpf: Add buildid check support Alexei Starovoitov
2018-04-06 15:07 ` Jiri Olsa [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=20180406150736.GA13785@krava \
--to=jolsa@redhat.com \
--cc=acme@redhat.com \
--cc=alexei.starovoitov@gmail.com \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=esyr@redhat.com \
--cc=jbenc@redhat.com \
--cc=jkosina@suse.cz \
--cc=jmarchan@redhat.com \
--cc=jolsa@kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.lkml@markovi.net \
--cc=netdev@vger.kernel.org \
--cc=quentin.monnet@netronome.com \
--cc=skozina@redhat.com \
--cc=yamada.masahiro@socionext.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;
as well as URLs for NNTP newsgroup(s).