mirror of https://github.com/OpenIPC/firmware.git
61 lines
1.9 KiB
Diff
61 lines
1.9 KiB
Diff
diff -drupN a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
|
|
--- a/net/ipv6/tcp_ipv6.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/net/ipv6/tcp_ipv6.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -238,6 +238,7 @@ static int tcp_v6_connect(struct sock *s
|
|
fl6.flowi6_mark = sk->sk_mark;
|
|
fl6.fl6_dport = usin->sin6_port;
|
|
fl6.fl6_sport = inet->inet_sport;
|
|
+ fl6.flowi6_uid = sk->sk_uid;
|
|
|
|
opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk));
|
|
final_p = fl6_update_dst(&fl6, opt, &final);
|
|
@@ -289,6 +290,11 @@ static int tcp_v6_connect(struct sock *s
|
|
inet->inet_sport,
|
|
inet->inet_dport);
|
|
|
|
+ if (tcp_fastopen_defer_connect(sk, &err))
|
|
+ return err;
|
|
+ if (err)
|
|
+ goto late_failure;
|
|
+
|
|
err = tcp_connect(sk);
|
|
if (err)
|
|
goto late_failure;
|
|
@@ -297,7 +303,6 @@ static int tcp_v6_connect(struct sock *s
|
|
|
|
late_failure:
|
|
tcp_set_state(sk, TCP_CLOSE);
|
|
- __sk_dst_reset(sk);
|
|
failure:
|
|
inet->inet_dport = 0;
|
|
sk->sk_route_caps = 0;
|
|
@@ -835,6 +840,7 @@ static void tcp_v6_send_response(const s
|
|
fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark);
|
|
fl6.fl6_dport = t1->dest;
|
|
fl6.fl6_sport = t1->source;
|
|
+ fl6.flowi6_uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL);
|
|
security_skb_classify_flow(skb, flowi6_to_flowi(&fl6));
|
|
|
|
/* Pass a socket to ip6_dst_lookup either it is for RST
|
|
@@ -1240,9 +1246,6 @@ static int tcp_v6_do_rcv(struct sock *sk
|
|
if (skb->protocol == htons(ETH_P_IP))
|
|
return tcp_v4_do_rcv(sk, skb);
|
|
|
|
- if (tcp_filter(sk, skb))
|
|
- goto discard;
|
|
-
|
|
/*
|
|
* socket locking is here for SMP purposes as backlog rcv
|
|
* is currently called with bh processing disabled.
|
|
@@ -1443,7 +1446,9 @@ process:
|
|
}
|
|
sock_hold(sk);
|
|
refcounted = true;
|
|
- nsk = tcp_check_req(sk, skb, req, false);
|
|
+ nsk = NULL;
|
|
+ if (!tcp_filter(sk, skb))
|
|
+ nsk = tcp_check_req(sk, skb, req, false);
|
|
if (!nsk) {
|
|
reqsk_put(req);
|
|
goto discard_and_relse;
|