diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2017-06-21 21:13:12 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-06-23 13:34:07 +0200 |
commit | 072505f4ede34bc533396dd48275c117529bd5b9 (patch) | |
tree | b53c74b10f24f470bc7dd5c9e2a1328e9227199e /lib | |
parent | f86ab0b1317ae1373f89edef945a63f564d06538 (diff) | |
download | barebox-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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ratp.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/ratp.c b/lib/ratp.c index 43b8b04dc7..d3c252047a 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) |