|
@@ -4,6 +4,7 @@
|
|
|
|
|
|
#include <linux/errno.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/jump_label.h>
|
|
#include <linux/jump_label.h>
|
|
|
|
+#include <linux/percpu.h>
|
|
#include <linux/rbtree.h>
|
|
#include <linux/rbtree.h>
|
|
#include <uapi/linux/bpf.h>
|
|
#include <uapi/linux/bpf.h>
|
|
|
|
|
|
@@ -21,6 +22,8 @@ struct bpf_cgroup_storage;
|
|
extern struct static_key_false cgroup_bpf_enabled_key;
|
|
extern struct static_key_false cgroup_bpf_enabled_key;
|
|
#define cgroup_bpf_enabled static_branch_unlikely(&cgroup_bpf_enabled_key)
|
|
#define cgroup_bpf_enabled static_branch_unlikely(&cgroup_bpf_enabled_key)
|
|
|
|
|
|
|
|
+DECLARE_PER_CPU(void*, bpf_cgroup_storage);
|
|
|
|
+
|
|
struct bpf_cgroup_storage_map;
|
|
struct bpf_cgroup_storage_map;
|
|
|
|
|
|
struct bpf_storage_buffer {
|
|
struct bpf_storage_buffer {
|
|
@@ -97,6 +100,17 @@ int __cgroup_bpf_run_filter_sock_ops(struct sock *sk,
|
|
int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor,
|
|
int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor,
|
|
short access, enum bpf_attach_type type);
|
|
short access, enum bpf_attach_type type);
|
|
|
|
|
|
|
|
+static inline void bpf_cgroup_storage_set(struct bpf_cgroup_storage *storage)
|
|
|
|
+{
|
|
|
|
+ struct bpf_storage_buffer *buf;
|
|
|
|
+
|
|
|
|
+ if (!storage)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ buf = READ_ONCE(storage->buf);
|
|
|
|
+ this_cpu_write(bpf_cgroup_storage, &buf->data[0]);
|
|
|
|
+}
|
|
|
|
+
|
|
struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog);
|
|
struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog);
|
|
void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage);
|
|
void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage);
|
|
void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage,
|
|
void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage,
|
|
@@ -250,6 +264,7 @@ static inline int cgroup_bpf_prog_query(const union bpf_attr *attr,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline void bpf_cgroup_storage_set(struct bpf_cgroup_storage *storage) {}
|
|
static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog,
|
|
static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog,
|
|
struct bpf_map *map) { return 0; }
|
|
struct bpf_map *map) { return 0; }
|
|
static inline void bpf_cgroup_storage_release(struct bpf_prog *prog,
|
|
static inline void bpf_cgroup_storage_release(struct bpf_prog *prog,
|