summaryrefslogtreecommitdiffstats
path: root/net/tipc/msg.h
diff options
context:
space:
mode:
authorTung Nguyen2018-09-28 20:23:22 +0200
committerDavid S. Miller2018-09-29 20:24:22 +0200
commit6787927475e52f6933e3affce365dabb2aa2fadf (patch)
treebb149221e75bb812ed610f50f993d81c55af9dd8 /net/tipc/msg.h
parenttipc: add SYN bit to connection setup messages (diff)
downloadkernel-qcow2-linux-6787927475e52f6933e3affce365dabb2aa2fadf.tar.gz
kernel-qcow2-linux-6787927475e52f6933e3affce365dabb2aa2fadf.tar.xz
kernel-qcow2-linux-6787927475e52f6933e3affce365dabb2aa2fadf.zip
tipc: buffer overflow handling in listener socket
Default socket receive buffer size for a listener socket is 2Mb. For each arriving empty SYN, the linux kernel allocates a 768 bytes buffer. This means that a listener socket can serve maximum 2700 simultaneous empty connection setup requests before it hits a receive buffer overflow, and much fewer if the SYN is carrying any significant amount of data. When this happens the setup request is rejected, and the client receives an ECONNREFUSED error. This commit mitigates this problem by letting the client socket try to retransmit the SYN message multiple times when it sees it rejected with the code TIPC_ERR_OVERLOAD. Retransmission is done at random intervals in the range of [100 ms, setup_timeout / 4], as many times as there is room for within the setup timeout limit. Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> Acked-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/msg.h')
-rw-r--r--net/tipc/msg.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/tipc/msg.h b/net/tipc/msg.h
index cd64d7b2a0fe..a2879e6ec5b6 100644
--- a/net/tipc/msg.h
+++ b/net/tipc/msg.h
@@ -980,6 +980,7 @@ bool tipc_msg_pskb_copy(u32 dst, struct sk_buff_head *msg,
struct sk_buff_head *cpy);
void __tipc_skb_queue_sorted(struct sk_buff_head *list, u16 seqno,
struct sk_buff *skb);
+bool tipc_msg_skb_clone(struct sk_buff_head *msg, struct sk_buff_head *cpy);
static inline u16 buf_seqno(struct sk_buff *skb)
{