• Krister Johansen's avatar
    bpf: ensure main program has an extable · 0108a4e9
    Krister Johansen authored
    When subprograms are in use, the main program is not jit'd after the
    subprograms because jit_subprogs sets a value for prog->bpf_func upon
    success.  Subsequent calls to the JIT are bypassed when this value is
    non-NULL.  This leads to a situation where the main program and its
    func[0] counterpart are both in the bpf kallsyms tree, but only func[0]
    has an extable.  Extables are only created during JIT.  Now there are
    two nearly identical program ksym entries in the tree, but only one has
    an extable.  Depending upon how the entries are placed, there's a chance
    that a fault will call search_extable on the aux with the NULL entry.
    
    Since jit_subprogs already copies state from func[0] to the main
    program, include the extable pointer in this state duplication.
    Additionally, ensure that the copy of the main program in func[0] is not
    added to the bpf_prog_kallsyms table. Instead, let the main program get
    added later in bpf_prog_load().  This ensures there is only a single
    copy of the main program in the kallsyms table, and that its tag matches
    the tag observed by tooling like bpftool.
    
    Cc: stable@vger.kernel.org
    Fixes: 1c2a088a ("bpf: x64: add JIT support for multi-function programs")
    Signed-off-by: default avatarKrister Johansen <kjlx@templeofstupid.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Acked-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
    Tested-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
    Link: https://lore.kernel.org/r/6de9b2f4b4724ef56efbb0339daaa66c8b68b1e7.1686616663.git.kjlx@templeofstupid.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    0108a4e9
verifier.c 556 KB