]> Git Repo - linux.git/blobdiff - tools/lib/bpf/bpf.h
bpf: prevent out of bounds speculation on pointer arithmetic
[linux.git] / tools / lib / bpf / bpf.h
index 69a4d40c42273e4c45d6c8f054487fcea2c8dfac..8f09de482839e289ff1b203d105eae26b52d2de6 100644 (file)
 #include <stdbool.h>
 #include <stddef.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef LIBBPF_API
+#define LIBBPF_API __attribute__((visibility("default")))
+#endif
+
 struct bpf_create_map_attr {
        const char *name;
        enum bpf_map_type map_type;
@@ -42,21 +50,24 @@ struct bpf_create_map_attr {
        __u32 inner_map_fd;
 };
 
-int bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr);
-int bpf_create_map_node(enum bpf_map_type map_type, const char *name,
-                       int key_size, int value_size, int max_entries,
-                       __u32 map_flags, int node);
-int bpf_create_map_name(enum bpf_map_type map_type, const char *name,
-                       int key_size, int value_size, int max_entries,
-                       __u32 map_flags);
-int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size,
-                  int max_entries, __u32 map_flags);
-int bpf_create_map_in_map_node(enum bpf_map_type map_type, const char *name,
-                              int key_size, int inner_map_fd, int max_entries,
-                              __u32 map_flags, int node);
-int bpf_create_map_in_map(enum bpf_map_type map_type, const char *name,
-                         int key_size, int inner_map_fd, int max_entries,
-                         __u32 map_flags);
+LIBBPF_API int
+bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr);
+LIBBPF_API int bpf_create_map_node(enum bpf_map_type map_type, const char *name,
+                                  int key_size, int value_size,
+                                  int max_entries, __u32 map_flags, int node);
+LIBBPF_API int bpf_create_map_name(enum bpf_map_type map_type, const char *name,
+                                  int key_size, int value_size,
+                                  int max_entries, __u32 map_flags);
+LIBBPF_API int bpf_create_map(enum bpf_map_type map_type, int key_size,
+                             int value_size, int max_entries, __u32 map_flags);
+LIBBPF_API int bpf_create_map_in_map_node(enum bpf_map_type map_type,
+                                         const char *name, int key_size,
+                                         int inner_map_fd, int max_entries,
+                                         __u32 map_flags, int node);
+LIBBPF_API int bpf_create_map_in_map(enum bpf_map_type map_type,
+                                    const char *name, int key_size,
+                                    int inner_map_fd, int max_entries,
+                                    __u32 map_flags);
 
 struct bpf_load_program_attr {
        enum bpf_prog_type prog_type;
@@ -67,6 +78,13 @@ struct bpf_load_program_attr {
        const char *license;
        __u32 kern_version;
        __u32 prog_ifindex;
+       __u32 prog_btf_fd;
+       __u32 func_info_rec_size;
+       const void *func_info;
+       __u32 func_info_cnt;
+       __u32 line_info_rec_size;
+       const void *line_info;
+       __u32 line_info_cnt;
 };
 
 /* Flags to direct loading requirements */
@@ -74,44 +92,75 @@ struct bpf_load_program_attr {
 
 /* Recommend log buffer size */
 #define BPF_LOG_BUF_SIZE (256 * 1024)
-int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
-                          char *log_buf, size_t log_buf_sz);
-int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
-                    size_t insns_cnt, const char *license,
-                    __u32 kern_version, char *log_buf,
-                    size_t log_buf_sz);
-int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
-                      size_t insns_cnt, int strict_alignment,
-                      const char *license, __u32 kern_version,
-                      char *log_buf, size_t log_buf_sz, int log_level);
-
-int bpf_map_update_elem(int fd, const void *key, const void *value,
-                       __u64 flags);
-
-int bpf_map_lookup_elem(int fd, const void *key, void *value);
-int bpf_map_delete_elem(int fd, const void *key);
-int bpf_map_get_next_key(int fd, const void *key, void *next_key);
-int bpf_obj_pin(int fd, const char *pathname);
-int bpf_obj_get(const char *pathname);
-int bpf_prog_attach(int prog_fd, int attachable_fd, enum bpf_attach_type type,
-                   unsigned int flags);
-int bpf_prog_detach(int attachable_fd, enum bpf_attach_type type);
-int bpf_prog_detach2(int prog_fd, int attachable_fd, enum bpf_attach_type type);
-int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size,
-                     void *data_out, __u32 *size_out, __u32 *retval,
-                     __u32 *duration);
-int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id);
-int bpf_map_get_next_id(__u32 start_id, __u32 *next_id);
-int bpf_prog_get_fd_by_id(__u32 id);
-int bpf_map_get_fd_by_id(__u32 id);
-int bpf_btf_get_fd_by_id(__u32 id);
-int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len);
-int bpf_prog_query(int target_fd, enum bpf_attach_type type, __u32 query_flags,
-                  __u32 *attach_flags, __u32 *prog_ids, __u32 *prog_cnt);
-int bpf_raw_tracepoint_open(const char *name, int prog_fd);
-int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf, __u32 log_buf_size,
-                bool do_log);
-int bpf_task_fd_query(int pid, int fd, __u32 flags, char *buf, __u32 *buf_len,
-                     __u32 *prog_id, __u32 *fd_type, __u64 *probe_offset,
-                     __u64 *probe_addr);
+LIBBPF_API int
+bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
+                      char *log_buf, size_t log_buf_sz);
+LIBBPF_API int bpf_load_program(enum bpf_prog_type type,
+                               const struct bpf_insn *insns, size_t insns_cnt,
+                               const char *license, __u32 kern_version,
+                               char *log_buf, size_t log_buf_sz);
+LIBBPF_API int bpf_verify_program(enum bpf_prog_type type,
+                                 const struct bpf_insn *insns,
+                                 size_t insns_cnt, __u32 prog_flags,
+                                 const char *license, __u32 kern_version,
+                                 char *log_buf, size_t log_buf_sz,
+                                 int log_level);
+
+LIBBPF_API int bpf_map_update_elem(int fd, const void *key, const void *value,
+                                  __u64 flags);
+
+LIBBPF_API int bpf_map_lookup_elem(int fd, const void *key, void *value);
+LIBBPF_API int bpf_map_lookup_and_delete_elem(int fd, const void *key,
+                                             void *value);
+LIBBPF_API int bpf_map_delete_elem(int fd, const void *key);
+LIBBPF_API int bpf_map_get_next_key(int fd, const void *key, void *next_key);
+LIBBPF_API int bpf_obj_pin(int fd, const char *pathname);
+LIBBPF_API int bpf_obj_get(const char *pathname);
+LIBBPF_API int bpf_prog_attach(int prog_fd, int attachable_fd,
+                              enum bpf_attach_type type, unsigned int flags);
+LIBBPF_API int bpf_prog_detach(int attachable_fd, enum bpf_attach_type type);
+LIBBPF_API int bpf_prog_detach2(int prog_fd, int attachable_fd,
+                               enum bpf_attach_type type);
+
+struct bpf_prog_test_run_attr {
+       int prog_fd;
+       int repeat;
+       const void *data_in;
+       __u32 data_size_in;
+       void *data_out;      /* optional */
+       __u32 data_size_out; /* in: max length of data_out
+                             * out: length of data_out */
+       __u32 retval;        /* out: return code of the BPF program */
+       __u32 duration;      /* out: average per repetition in ns */
+};
+
+LIBBPF_API int bpf_prog_test_run_xattr(struct bpf_prog_test_run_attr *test_attr);
+
+/*
+ * bpf_prog_test_run does not check that data_out is large enough. Consider
+ * using bpf_prog_test_run_xattr instead.
+ */
+LIBBPF_API int bpf_prog_test_run(int prog_fd, int repeat, void *data,
+                                __u32 size, void *data_out, __u32 *size_out,
+                                __u32 *retval, __u32 *duration);
+LIBBPF_API int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id);
+LIBBPF_API int bpf_map_get_next_id(__u32 start_id, __u32 *next_id);
+LIBBPF_API int bpf_prog_get_fd_by_id(__u32 id);
+LIBBPF_API int bpf_map_get_fd_by_id(__u32 id);
+LIBBPF_API int bpf_btf_get_fd_by_id(__u32 id);
+LIBBPF_API int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len);
+LIBBPF_API int bpf_prog_query(int target_fd, enum bpf_attach_type type,
+                             __u32 query_flags, __u32 *attach_flags,
+                             __u32 *prog_ids, __u32 *prog_cnt);
+LIBBPF_API int bpf_raw_tracepoint_open(const char *name, int prog_fd);
+LIBBPF_API int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf,
+                           __u32 log_buf_size, bool do_log);
+LIBBPF_API int bpf_task_fd_query(int pid, int fd, __u32 flags, char *buf,
+                                __u32 *buf_len, __u32 *prog_id, __u32 *fd_type,
+                                __u64 *probe_offset, __u64 *probe_addr);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
 #endif /* __LIBBPF_BPF_H */
This page took 0.038693 seconds and 4 git commands to generate.