Commit c6382918 authored by Cong Wang's avatar Cong Wang Committed by Alexei Starovoitov
Browse files

af_unix: Implement ->psock_update_sk_prot()



Now we can implement unix_bpf_update_proto() to update
sk_prot, especially prot->close().

Signed-off-by: default avatarCong Wang <cong.wang@bytedance.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210704190252.11866-7-xiyou.wangcong@gmail.com
parent c7272e15
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10277,6 +10277,7 @@ F: net/core/skmsg.c
F:	net/core/sock_map.c
F:	net/ipv4/tcp_bpf.c
F:	net/ipv4/udp_bpf.c
F:	net/unix/unix_bpf.c
LANDLOCK SECURITY MODULE
M:	Mickaël Salaün <mic@digikod.net>
+10 −0
Original line number Diff line number Diff line
@@ -89,4 +89,14 @@ void unix_sysctl_unregister(struct net *net);
static inline int unix_sysctl_register(struct net *net) { return 0; }
static inline void unix_sysctl_unregister(struct net *net) {}
#endif

#ifdef CONFIG_BPF_SYSCALL
extern struct proto unix_proto;

int unix_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
void __init unix_bpf_build_proto(void);
#else
static inline void __init unix_bpf_build_proto(void)
{}
#endif
#endif
+1 −0
Original line number Diff line number Diff line
@@ -1517,6 +1517,7 @@ void sock_map_close(struct sock *sk, long timeout)
	release_sock(sk);
	saved_close(sk, timeout);
}
EXPORT_SYMBOL_GPL(sock_map_close);

static int sock_map_iter_attach_target(struct bpf_prog *prog,
				       union bpf_iter_link_info *linfo,
+1 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ obj-$(CONFIG_UNIX) += unix.o

unix-y			:= af_unix.o garbage.o
unix-$(CONFIG_SYSCTL)	+= sysctl_net_unix.o
unix-$(CONFIG_BPF_SYSCALL) += unix_bpf.o

obj-$(CONFIG_UNIX_DIAG)	+= unix_diag.o
unix_diag-y		:= diag.o
+5 −1
Original line number Diff line number Diff line
@@ -788,11 +788,14 @@ static void unix_close(struct sock *sk, long timeout)
	 */
}

static struct proto unix_proto = {
struct proto unix_proto = {
	.name			= "UNIX",
	.owner			= THIS_MODULE,
	.obj_size		= sizeof(struct unix_sock),
	.close			= unix_close,
#ifdef CONFIG_BPF_SYSCALL
	.psock_update_sk_prot	= unix_bpf_update_proto,
#endif
};

static struct sock *unix_create1(struct net *net, struct socket *sock, int kern)
@@ -2973,6 +2976,7 @@ static int __init af_unix_init(void)

	sock_register(&unix_family_ops);
	register_pernet_subsys(&unix_net_ops);
	unix_bpf_build_proto();
out:
	return rc;
}
Loading