Commit 06baf9bf authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'tcp-receiver-changes'

Eric Dumazet says:

====================
tcp: receiver changes

Before accepting an incoming packet:

- Make sure to not accept a packet beyond advertized RWIN.
  If not, increment a new SNMP counter (LINUX_MIB_BEYOND_WINDOW)

- ooo packets should update rcv_mss and tp->scaling_ratio.

- Make sure to not accept packet beyond sk_rcvbuf limit.

This series includes three associated packetdrill tests.
====================

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


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents a86eb2a6 906893cf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ unsigned_long LINUX_MIB_TIMEWAITRECYCLED
unsigned_long  LINUX_MIB_TIMEWAITKILLED
unsigned_long  LINUX_MIB_PAWSACTIVEREJECTED
unsigned_long  LINUX_MIB_PAWSESTABREJECTED
unsigned_long  LINUX_MIB_BEYOND_WINDOW
unsigned_long  LINUX_MIB_TSECR_REJECTED
unsigned_long  LINUX_MIB_PAWS_OLD_ACK
unsigned_long  LINUX_MIB_PAWS_TW_REJECTED
+8 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@
	FN(TCP_LISTEN_OVERFLOW)		\
	FN(TCP_OLD_SEQUENCE)		\
	FN(TCP_INVALID_SEQUENCE)	\
	FN(TCP_INVALID_END_SEQUENCE)	\
	FN(TCP_INVALID_ACK_SEQUENCE)	\
	FN(TCP_RESET)			\
	FN(TCP_INVALID_SYN)		\
@@ -303,8 +304,14 @@ enum skb_drop_reason {
	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 */
	/** @SKB_DROP_REASON_TCP_INVALID_SEQUENCE: Not acceptable SEQ field. */
	SKB_DROP_REASON_TCP_INVALID_SEQUENCE,
	/**
	 * @SKB_DROP_REASON_TCP_INVALID_END_SEQUENCE:
	 * Not acceptable END_SEQ field.
	 * Corresponds to LINUX_MIB_BEYOND_WINDOW.
	 */
	SKB_DROP_REASON_TCP_INVALID_END_SEQUENCE,
	/**
	 * @SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE: Not acceptable ACK SEQ
	 * field because ack sequence is not in the window between snd_una
+1 −1
Original line number Diff line number Diff line
@@ -1553,7 +1553,7 @@ __sk_rmem_schedule(struct sock *sk, int size, bool pfmemalloc)
}

static inline bool
sk_rmem_schedule(struct sock *sk, struct sk_buff *skb, int size)
sk_rmem_schedule(struct sock *sk, const struct sk_buff *skb, int size)
{
	return __sk_rmem_schedule(sk, size, skb_pfmemalloc(skb));
}
+1 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ enum
	LINUX_MIB_TIMEWAITKILLED,		/* TimeWaitKilled */
	LINUX_MIB_PAWSACTIVEREJECTED,		/* PAWSActiveRejected */
	LINUX_MIB_PAWSESTABREJECTED,		/* PAWSEstabRejected */
	LINUX_MIB_BEYOND_WINDOW,		/* BeyondWindow */
	LINUX_MIB_TSECRREJECTED,		/* TSEcrRejected */
	LINUX_MIB_PAWS_OLD_ACK,			/* PAWSOldAck */
	LINUX_MIB_PAWS_TW_REJECTED,		/* PAWSTimewait */
+1 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ static const struct snmp_mib snmp4_net_list[] = {
	SNMP_MIB_ITEM("TWKilled", LINUX_MIB_TIMEWAITKILLED),
	SNMP_MIB_ITEM("PAWSActive", LINUX_MIB_PAWSACTIVEREJECTED),
	SNMP_MIB_ITEM("PAWSEstab", LINUX_MIB_PAWSESTABREJECTED),
	SNMP_MIB_ITEM("BeyondWindow", LINUX_MIB_BEYOND_WINDOW),
	SNMP_MIB_ITEM("TSEcrRejected", LINUX_MIB_TSECRREJECTED),
	SNMP_MIB_ITEM("PAWSOldAck", LINUX_MIB_PAWS_OLD_ACK),
	SNMP_MIB_ITEM("PAWSTimewait", LINUX_MIB_PAWS_TW_REJECTED),
Loading