forked from luck/tmp_suning_uos_patched
30897832d8
Adds support for both bpf_{sk, inode}_storage_{get, delete} to be used in LSM programs. These helpers are not used for tracing programs (currently) as their usage is tied to the life-cycle of the object and should only be used where the owning object won't be freed (when the owning object is passed as an argument to the LSM hook). Thus, they are safer to use in LSM hooks than tracing. Usage of local storage in tracing programs will probably follow a per function based whitelist approach. Since the UAPI helper signature for bpf_sk_storage expect a bpf_sock, it, leads to a compilation warning for LSM programs, it's also updated to accept a void * pointer instead. Signed-off-by: KP Singh <kpsingh@google.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20200825182919.1118197-7-kpsingh@chromium.org
65 lines
1.7 KiB
C
65 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (c) 2019 Facebook */
|
|
#ifndef _BPF_SK_STORAGE_H
|
|
#define _BPF_SK_STORAGE_H
|
|
|
|
#include <linux/rculist.h>
|
|
#include <linux/list.h>
|
|
#include <linux/hash.h>
|
|
#include <linux/types.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/bpf.h>
|
|
#include <net/sock.h>
|
|
#include <uapi/linux/sock_diag.h>
|
|
#include <uapi/linux/btf.h>
|
|
#include <linux/bpf_local_storage.h>
|
|
|
|
struct sock;
|
|
|
|
void bpf_sk_storage_free(struct sock *sk);
|
|
|
|
extern const struct bpf_func_proto bpf_sk_storage_get_proto;
|
|
extern const struct bpf_func_proto bpf_sk_storage_delete_proto;
|
|
extern const struct bpf_func_proto sk_storage_get_btf_proto;
|
|
extern const struct bpf_func_proto sk_storage_delete_btf_proto;
|
|
|
|
struct bpf_local_storage_elem;
|
|
struct bpf_sk_storage_diag;
|
|
struct sk_buff;
|
|
struct nlattr;
|
|
struct sock;
|
|
|
|
#ifdef CONFIG_BPF_SYSCALL
|
|
int bpf_sk_storage_clone(const struct sock *sk, struct sock *newsk);
|
|
struct bpf_sk_storage_diag *
|
|
bpf_sk_storage_diag_alloc(const struct nlattr *nla_stgs);
|
|
void bpf_sk_storage_diag_free(struct bpf_sk_storage_diag *diag);
|
|
int bpf_sk_storage_diag_put(struct bpf_sk_storage_diag *diag,
|
|
struct sock *sk, struct sk_buff *skb,
|
|
int stg_array_type,
|
|
unsigned int *res_diag_size);
|
|
#else
|
|
static inline int bpf_sk_storage_clone(const struct sock *sk,
|
|
struct sock *newsk)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline struct bpf_sk_storage_diag *
|
|
bpf_sk_storage_diag_alloc(const struct nlattr *nla)
|
|
{
|
|
return NULL;
|
|
}
|
|
static inline void bpf_sk_storage_diag_free(struct bpf_sk_storage_diag *diag)
|
|
{
|
|
}
|
|
static inline int bpf_sk_storage_diag_put(struct bpf_sk_storage_diag *diag,
|
|
struct sock *sk, struct sk_buff *skb,
|
|
int stg_array_type,
|
|
unsigned int *res_diag_size)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
#endif /* _BPF_SK_STORAGE_H */
|