Re: [PATCH] dccp: Reponsed with Reset when packet is received with invalid option
From: Arnaldo Carvalho de Melo <hidden>
Date: 2008-08-20 14:05:08
Em Wed, Aug 20, 2008 at 09:20:07AM +0800, Wei Yongjun escreveu:
RFC4340 said that if a packet is received with invalid option(such as Mandatory
Option as the last byte of the option list), endpoint should reponsed with
Reset. In LISTIN state and RESPOND state, the endpoint reponsed with reset
correctly, but in REQUEST state and OPEN state, the endpoint just ignored
the packet. The packet sequence is as the following:
Case 1:
Endpoint A Endpoint B
(CLOSED) (CLOSED)
<---------------- REQUEST
RESPONSE -----------------> (*1)
(with invalid option)
<---------------- RESET
(with Reset Code 5, "Option Error")
(*1) it just be ignored currently, no reset is sent
Case 2:
Endpoint A Endpoint B
(OPEN) (OPEN)
DATA-ACK -----------------> (*2)
(with invalid option)
<---------------- RESET
(with Reset Code 5, "Option Error")
(*2) it just be ignored currently, no reset is sent
This patch fixed the problem by reponsed with Reset instead of ignore packet.
Signed-off-by: Wei Yongjun <redacted>God catch! Please also keep netdev@vger.kernel.org on the CC list. Acked-by: Arnaldo Carvalho de Melo <redacted>
quoted hunk
--- net/dccp/input.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)diff --git a/net/dccp/input.c b/net/dccp/input.c index dab4cc9..df0e671 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c@@ -370,7 +370,7 @@ int dccp_rcv_established(struct sock *sk, struct sk_buff *skb,goto discard; if (dccp_parse_options(sk, NULL, skb)) - goto discard; + return 1; dccp_handle_ackvec_processing(sk, skb); dccp_deliver_input_to_ccids(sk, skb);@@ -631,7 +631,7 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,/* Step 8: Process options */ if (dccp_parse_options(sk, NULL, skb)) - goto discard; + return 1; /* * Step 9: Process Reset -- 1.5.3.8 -- To unsubscribe from this list: send the line "unsubscribe dccp" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html