Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net: bpf: handle return value of post_bind{4,6} and add selftests for it #2349

Closed
wants to merge 4 commits into from

Conversation

kernel-patches-bot
Copy link

Pull request for series with
subject: net: bpf: handle return value of post_bind{4,6} and add selftests for it
version: 2
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986

@kernel-patches-bot
Copy link
Author

Master branch: 35580f9
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: 35580f9
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: 63d000c
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: 11f9983
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: 9e6b19a
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: e63a023
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: 5e22dd1
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=601986
version: 2

@kernel-patches-bot
Copy link
Author

Master branch: 5e22dd1
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=602887
version: 3

@kernel-patches-bot
Copy link
Author

At least one diff in series https://patchwork.kernel.org/project/netdevbpf/list/?series=602887 expired. Closing PR.

@kernel-patches-bot
Copy link
Author

Master branch: 640a171
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=603077
version: 4

@kernel-patches-bot
Copy link
Author

Master branch: 1372d34
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=603077
version: 4

…IND()

The return value of BPF_CGROUP_RUN_PROG_INET{4,6}_POST_BIND() in
__inet_bind() is not handled properly. While the return value
is non-zero, it will set inet_saddr and inet_rcv_saddr to 0 and
exit:

	err = BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk);
	if (err) {
		inet->inet_saddr = inet->inet_rcv_saddr = 0;
		goto out_release_sock;
	}

Let's take UDP for example and see what will happen. For UDP
socket, it will be added to 'udp_prot.h.udp_table->hash' and
'udp_prot.h.udp_table->hash2' after the sk->sk_prot->get_port()
called success. If 'inet->inet_rcv_saddr' is specified here,
then 'sk' will be in the 'hslot2' of 'hash2' that it don't belong
to (because inet_saddr is changed to 0), and UDP packet received
will not be passed to this sock. If 'inet->inet_rcv_saddr' is not
specified here, the sock will work fine, as it can receive packet
properly, which is wired, as the 'bind()' is already failed.

To undo the get_port() operation, introduce the 'put_port' field
for 'struct proto'. For TCP proto, it is inet_put_port(); For UDP
proto, it is udp_lib_unhash(); For icmp proto, it is
ping_unhash().

Therefore, after sys_bind() fail caused by
BPF_CGROUP_RUN_PROG_INET4_POST_BIND(), it will be unbinded, which
means that it can try to be binded to another port.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
With previous patch, kernel is able to 'put_port' after sys_bind()
fails. Add the test for that case: rebind another port after
sys_bind() fails. If the bind success, it means previous bind
operation is already undoed.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
Use C99 initializers for the initialization of 'tests' in test_sock.c.

Signed-off-by: Menglong Dong <imagedong@tencent.com>
@kernel-patches-bot
Copy link
Author

At least one diff in series https://patchwork.kernel.org/project/netdevbpf/list/?series=603077 irrelevant now. Closing PR.

@kernel-patches-bot kernel-patches-bot deleted the series/601986=>bpf-next branch January 6, 2022 13:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants