diff options
author | Alexei Starovoitov <ast@plumgrid.com> | 2014-12-02 00:06:35 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-06 06:47:32 +0100 |
commit | 89aa075832b0da4402acebd698d0411dcc82d03e (patch) | |
tree | 99e7aa6cc85d3cd4ed0caaa6f1e5aea79e7cfcba /arch/sparc | |
parent | bpf: verifier: add checks for BPF_ABS | BPF_IND instructions (diff) | |
download | linux-89aa075832b0da4402acebd698d0411dcc82d03e.tar.xz linux-89aa075832b0da4402acebd698d0411dcc82d03e.zip |
net: sock: allow eBPF programs to be attached to sockets
introduce new setsockopt() command:
setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd, sizeof(prog_fd))
where prog_fd was received from syscall bpf(BPF_PROG_LOAD, attr, ...)
and attr->prog_type == BPF_PROG_TYPE_SOCKET_FILTER
setsockopt() calls bpf_prog_get() which increments refcnt of the program,
so it doesn't get unloaded while socket is using the program.
The same eBPF program can be attached to multiple sockets.
User task exit automatically closes socket which calls sk_filter_uncharge()
which decrements refcnt of eBPF program
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/include/uapi/asm/socket.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h index 4a8003a94163..e6a16c40be5f 100644 --- a/arch/sparc/include/uapi/asm/socket.h +++ b/arch/sparc/include/uapi/asm/socket.h @@ -78,6 +78,9 @@ #define SO_INCOMING_CPU 0x0033 +#define SO_ATTACH_BPF 0x0034 +#define SO_DETACH_BPF SO_DETACH_FILTER + /* Security levels - as per NRL IPv6 - don't actually do anything */ #define SO_SECURITY_AUTHENTICATION 0x5001 #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 |