Commit b84c5239 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'tcp-misc-changes'

Eric Dumazet says:

====================
tcp: misc changes

Minor changes, following recent changes in TCP stack.
====================

Link: https://patch.msgid.link/20250301201424.2046477-1-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 3424291d 863a952e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@
	FN(TCP_OFOMERGE)		\
	FN(TCP_RFC7323_PAWS)		\
	FN(TCP_RFC7323_PAWS_ACK)	\
	FN(TCP_RFC7323_TSECR)		\
	FN(TCP_LISTEN_OVERFLOW)		\
	FN(TCP_OLD_SEQUENCE)		\
	FN(TCP_INVALID_SEQUENCE)	\
	FN(TCP_INVALID_ACK_SEQUENCE)	\
@@ -281,6 +283,13 @@ enum skb_drop_reason {
	 * Corresponds to LINUX_MIB_PAWS_OLD_ACK.
	 */
	SKB_DROP_REASON_TCP_RFC7323_PAWS_ACK,
	/**
	 * @SKB_DROP_REASON_TCP_RFC7323_TSECR: PAWS check, invalid TSEcr.
	 * Corresponds to LINUX_MIB_TSECRREJECTED.
	 */
	SKB_DROP_REASON_TCP_RFC7323_TSECR,
	/** @SKB_DROP_REASON_TCP_LISTEN_OVERFLOW: listener queue full. */
	SKB_DROP_REASON_TCP_LISTEN_OVERFLOW,
	/** @SKB_DROP_REASON_TCP_OLD_SEQUENCE: Old SEQ field (duplicate packet) */
	SKB_DROP_REASON_TCP_OLD_SEQUENCE,
	/** @SKB_DROP_REASON_TCP_INVALID_SEQUENCE: Not acceptable SEQ field */
+1 −1
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ static inline struct sock *__inet6_lookup_skb(struct inet_hashinfo *hashinfo,
					      int iif, int sdif,
					      bool *refcounted)
{
	struct net *net = dev_net(skb_dst(skb)->dev);
	struct net *net = dev_net_rcu(skb_dst(skb)->dev);
	const struct ipv6hdr *ip6h = ipv6_hdr(skb);
	struct sock *sk;

+1 −1
Original line number Diff line number Diff line
@@ -492,7 +492,7 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo,
					     const int sdif,
					     bool *refcounted)
{
	struct net *net = dev_net(skb_dst(skb)->dev);
	struct net *net = dev_net_rcu(skb_dst(skb)->dev);
	const struct iphdr *iph = ip_hdr(skb);
	struct sock *sk;

+1 −1
Original line number Diff line number Diff line
@@ -392,7 +392,7 @@ enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *tw,
					      u32 *tw_isn);
struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
			   struct request_sock *req, bool fastopen,
			   bool *lost_race);
			   bool *lost_race, enum skb_drop_reason *drop_reason);
enum skb_drop_reason tcp_child_process(struct sock *parent, struct sock *child,
				       struct sk_buff *skb);
void tcp_enter_loss(struct sock *sk);
+18 −18
Original line number Diff line number Diff line
@@ -3693,33 +3693,33 @@ EXPORT_SYMBOL(tcp_sock_set_keepcnt);

int tcp_set_window_clamp(struct sock *sk, int val)
{
	u32 old_window_clamp, new_window_clamp;
	struct tcp_sock *tp = tcp_sk(sk);

	if (!val) {
		if (sk->sk_state != TCP_CLOSE)
			return -EINVAL;
		WRITE_ONCE(tp->window_clamp, 0);
	} else {
		u32 new_rcv_ssthresh, old_window_clamp = tp->window_clamp;
		u32 new_window_clamp = val < SOCK_MIN_RCVBUF / 2 ?
						SOCK_MIN_RCVBUF / 2 : val;
		return 0;
	}

	old_window_clamp = tp->window_clamp;
	new_window_clamp = max_t(int, SOCK_MIN_RCVBUF / 2, val);

	if (new_window_clamp == old_window_clamp)
		return 0;

	WRITE_ONCE(tp->window_clamp, new_window_clamp);
		if (new_window_clamp < old_window_clamp) {
			/* need to apply the reserved mem provisioning only
			 * when shrinking the window clamp
			 */
			__tcp_adjust_rcv_ssthresh(sk, tp->window_clamp);

		} else {
			new_rcv_ssthresh = min(tp->rcv_wnd, tp->window_clamp);
			tp->rcv_ssthresh = max(new_rcv_ssthresh,
					       tp->rcv_ssthresh);
		}
	}
	/* Need to apply the reserved mem provisioning only
	 * when shrinking the window clamp.
	 */
	if (new_window_clamp < old_window_clamp)
		__tcp_adjust_rcv_ssthresh(sk, new_window_clamp);
	else
		tp->rcv_ssthresh = clamp(new_window_clamp,
					 tp->rcv_ssthresh,
					 tp->rcv_wnd);
	return 0;
}

Loading