1*53632e11SMartin KaFai Lau // SPDX-License-Identifier: GPL-2.0
2*53632e11SMartin KaFai Lau /* Copyright (c) 2020 Facebook */
3*53632e11SMartin KaFai Lau 
4*53632e11SMartin KaFai Lau #include <vmlinux.h>
5*53632e11SMartin KaFai Lau #include <bpf/bpf_tracing.h>
6*53632e11SMartin KaFai Lau #include <bpf/bpf_helpers.h>
7*53632e11SMartin KaFai Lau 
8*53632e11SMartin KaFai Lau struct {
9*53632e11SMartin KaFai Lau 	__uint(type, BPF_MAP_TYPE_SK_STORAGE);
10*53632e11SMartin KaFai Lau 	__uint(map_flags, BPF_F_NO_PREALLOC);
11*53632e11SMartin KaFai Lau 	__type(key, int);
12*53632e11SMartin KaFai Lau 	__type(value, int);
13*53632e11SMartin KaFai Lau } sk_stg_map SEC(".maps");
14*53632e11SMartin KaFai Lau 
15*53632e11SMartin KaFai Lau SEC("fentry/bpf_sk_storage_free")
BPF_PROG(trace_bpf_sk_storage_free,struct sock * sk)16*53632e11SMartin KaFai Lau int BPF_PROG(trace_bpf_sk_storage_free, struct sock *sk)
17*53632e11SMartin KaFai Lau {
18*53632e11SMartin KaFai Lau 	int *value;
19*53632e11SMartin KaFai Lau 
20*53632e11SMartin KaFai Lau 	value = bpf_sk_storage_get(&sk_stg_map, sk, 0,
21*53632e11SMartin KaFai Lau 				   BPF_SK_STORAGE_GET_F_CREATE);
22*53632e11SMartin KaFai Lau 
23*53632e11SMartin KaFai Lau 	if (value)
24*53632e11SMartin KaFai Lau 		*value = 1;
25*53632e11SMartin KaFai Lau 
26*53632e11SMartin KaFai Lau 	return 0;
27*53632e11SMartin KaFai Lau }
28*53632e11SMartin KaFai Lau 
29*53632e11SMartin KaFai Lau char _license[] SEC("license") = "GPL";
30