summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2017-06-21 21:13:12 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2017-06-23 13:34:07 +0200
commit072505f4ede34bc533396dd48275c117529bd5b9 (patch)
treeb53c74b10f24f470bc7dd5c9e2a1328e9227199e
parentf86ab0b1317ae1373f89edef945a63f564d06538 (diff)
downloadbarebox-072505f4ede34bc533396dd48275c117529bd5b9.tar.gz
barebox-072505f4ede34bc533396dd48275c117529bd5b9.tar.xz
ratp: completely ignore RST flagged packets in behavior G
The reference says: This procedure represents the behavior of the CLOSED state of a connection. All incoming packets are discarded. If the packet had the RST flag set take no action. Otherwise it is necessary to build a RST packet. So, skip building the RST packet if the incoming one had RST set. This commit fixes an infinite loop of messages sent and received between both ends during the connection close procedure, found when testing barebox against a third party ratp implementation. Signed-off-by: Aleksander Morgado <aleksander@aleksander.es> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--lib/ratp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/ratp.c b/lib/ratp.c
index 43b8b04dc..d3c252047 100644
--- a/lib/ratp.c
+++ b/lib/ratp.c
@@ -1033,6 +1033,9 @@ static int ratp_behaviour_g(struct ratp_internal *ri, void *pkt)
pr_debug("%s\n", __func__);
+ if (hdr->control & RATP_CONTROL_RST)
+ return 0;
+
control = RATP_CONTROL_RST;
if (hdr->control & RATP_CONTROL_ACK)