Currently there is no way to propagate sk storage from the listener socket to a newly accepted one. Consider the following use case: fd = socket(); setsockopt(fd, SOL_IP, IP_TOS,...); /* ^^^ setsockopt BPF program triggers here and saves something * into sk storage of the listener. */ listen(fd, ...); while (client = accept(fd)) { /* At this point all association between listener * socket and newly accepted one is gone. New * socket will not have any sk storage attached. */ } Let's add new BPF_SK_STORAGE_GET_F_CLONE flag that can be passed to bpf_sk_storage_get. This new flag indicates that that particular bpf_sk_storage_elem should be cloned when the socket is cloned. Cc: Martin KaFai Lau <kafai@xxxxxx> Stanislav Fomichev (3): bpf: support cloning sk storage on accept() bpf: sync bpf.h to tools/ selftests/bpf: add sockopt clone/inheritance test include/net/bpf_sk_storage.h | 10 + include/uapi/linux/bpf.h | 1 + net/core/bpf_sk_storage.c | 102 ++++++- net/core/sock.c | 9 +- tools/include/uapi/linux/bpf.h | 1 + tools/testing/selftests/bpf/.gitignore | 1 + tools/testing/selftests/bpf/Makefile | 3 +- .../selftests/bpf/progs/sockopt_inherit.c | 102 +++++++ .../selftests/bpf/test_sockopt_inherit.c | 252 ++++++++++++++++++ 9 files changed, 473 insertions(+), 8 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/sockopt_inherit.c create mode 100644 tools/testing/selftests/bpf/test_sockopt_inherit.c -- 2.22.0.770.g0f2c4a37fd-goog