Merge branch 'Support kernel module ksym variables'
authorAlexei Starovoitov <ast@kernel.org>
Tue, 12 Jan 2021 23:00:01 +0000 (15:00 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 13 Jan 2021 01:24:30 +0000 (17:24 -0800)
commit7c7a80ea5e3f91a93f17070f0b071cc34a474e3c
tree348ac2808f0006934b49aa2f472b7d069af710ba
parent3218231dbb16cd85d94831759b6c78e6feb54b58
parent430d97a8a7bf1500c081ce756ff2ead73d2303c5
Merge branch 'Support kernel module ksym variables'

Andrii Nakryiko says:

====================

Add support for using kernel module global variables (__ksym externs in BPF
program). BPF verifier will now support ldimm64 with src_reg=BPF_PSEUDO_BTF_ID
and non-zero insn[1].imm field, specifying module BTF's FD. In such case,
module BTF object, similarly to BPF maps referenced from ldimm64 with
src_reg=BPF_PSEUDO_MAP_FD, will be recorded in bpf_progran's auxiliary data
and refcnt will be increased for both BTF object itself and its kernel module.
This makes sure kernel module won't be unloaded from under active attached BPF
program. These refcounts will be dropped when BPF program is unloaded.

New selftest validates all this is working as intended. bpf_testmod.ko is
extended with per-CPU variable. Selftests expects the latest pahole changes
(soon to be released as v1.20) to generate per-CPU variable BTF info for
kernel module.

v2->v3:
  - added comments, addressed feedack (Yonghong, Hao);
v1->v2:
  - fixed few compiler warnings, posted as separate pre-patches;
rfc->v1:
  - use sys_membarrier(MEMBARRIER_CMD_GLOBAL) (Alexei).

Cc: Hao Luo <haoluo@google.com>
====================

Signed-off-by: Alexei Starovoitov <ast@kernel.org>