Path: blob/master/kernel/bpf/preload/bpf_preload_kern.c
29278 views
// SPDX-License-Identifier: GPL-2.01#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt2#include <linux/init.h>3#include <linux/module.h>4#include "bpf_preload.h"5#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__6#include "iterators/iterators.lskel-little-endian.h"7#else8#include "iterators/iterators.lskel-big-endian.h"9#endif1011static struct bpf_link *maps_link, *progs_link;12static struct iterators_bpf *skel;1314static void free_links_and_skel(void)15{16if (!IS_ERR_OR_NULL(maps_link))17bpf_link_put(maps_link);18if (!IS_ERR_OR_NULL(progs_link))19bpf_link_put(progs_link);20iterators_bpf__destroy(skel);21}2223static int preload(struct bpf_preload_info *obj)24{25strscpy(obj[0].link_name, "maps.debug", sizeof(obj[0].link_name));26obj[0].link = maps_link;27strscpy(obj[1].link_name, "progs.debug", sizeof(obj[1].link_name));28obj[1].link = progs_link;29return 0;30}3132static struct bpf_preload_ops ops = {33.preload = preload,34.owner = THIS_MODULE,35};3637static int load_skel(void)38{39int err;4041skel = iterators_bpf__open();42if (!skel)43return -ENOMEM;44err = iterators_bpf__load(skel);45if (err)46goto out;47err = iterators_bpf__attach(skel);48if (err)49goto out;50maps_link = bpf_link_get_from_fd(skel->links.dump_bpf_map_fd);51if (IS_ERR(maps_link)) {52err = PTR_ERR(maps_link);53goto out;54}55progs_link = bpf_link_get_from_fd(skel->links.dump_bpf_prog_fd);56if (IS_ERR(progs_link)) {57err = PTR_ERR(progs_link);58goto out;59}60/* Avoid taking over stdin/stdout/stderr of init process. Zeroing out61* makes skel_closenz() a no-op later in iterators_bpf__destroy().62*/63close_fd(skel->links.dump_bpf_map_fd);64skel->links.dump_bpf_map_fd = 0;65close_fd(skel->links.dump_bpf_prog_fd);66skel->links.dump_bpf_prog_fd = 0;67return 0;68out:69free_links_and_skel();70return err;71}7273static int __init load(void)74{75int err;7677err = load_skel();78if (err)79return err;80bpf_preload_ops = &ops;81return err;82}8384static void __exit fini(void)85{86bpf_preload_ops = NULL;87free_links_and_skel();88}89late_initcall(load);90module_exit(fini);91MODULE_IMPORT_NS("BPF_INTERNAL");92MODULE_LICENSE("GPL");93MODULE_DESCRIPTION("Embedded BPF programs for introspection in bpffs");949596