sctp: process fwd tsn chunk only when prsctp is enabled
authorXin Long <lucien.xin@gmail.com>
Fri, 3 Feb 2017 09:37:06 +0000 (17:37 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Feb 2017 16:57:15 +0000 (11:57 -0500)
This patch is to check if asoc->peer.prsctp_capable is set before
processing fwd tsn chunk, if not, it will return an ERROR to the
peer, just as rfc3758 section 3.3.1 demands.

Reported-by: Julian Cordes <julian.cordes@gmail.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/sm_statefuns.c

index 782e579472c9d39fe2ec6f35e70b3f29e97618ab..d8798ddda726176ac66ed36f8234ed89109e8c20 100644 (file)
@@ -3867,6 +3867,9 @@ sctp_disposition_t sctp_sf_eat_fwd_tsn(struct net *net,
                return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
        }
 
+       if (!asoc->peer.prsctp_capable)
+               return sctp_sf_unk_chunk(net, ep, asoc, type, arg, commands);
+
        /* Make sure that the FORWARD_TSN chunk has valid length.  */
        if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_fwdtsn_chunk)))
                return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
@@ -3935,6 +3938,9 @@ sctp_disposition_t sctp_sf_eat_fwd_tsn_fast(
                return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
        }
 
+       if (!asoc->peer.prsctp_capable)
+               return sctp_sf_unk_chunk(net, ep, asoc, type, arg, commands);
+
        /* Make sure that the FORWARD_TSN chunk has a valid length.  */
        if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_fwdtsn_chunk)))
                return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,