|
@@ -3422,6 +3422,12 @@ sctp_disposition_t sctp_sf_ootb(struct net *net,
|
|
|
return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
|
|
|
commands);
|
|
|
|
|
|
+ /* Report violation if chunk len overflows */
|
|
|
+ ch_end = ((__u8 *)ch) + SCTP_PAD4(ntohs(ch->length));
|
|
|
+ if (ch_end > skb_tail_pointer(skb))
|
|
|
+ return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
|
|
|
+ commands);
|
|
|
+
|
|
|
/* Now that we know we at least have a chunk header,
|
|
|
* do things that are type appropriate.
|
|
|
*/
|
|
@@ -3453,12 +3459,6 @@ sctp_disposition_t sctp_sf_ootb(struct net *net,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Report violation if chunk len overflows */
|
|
|
- ch_end = ((__u8 *)ch) + SCTP_PAD4(ntohs(ch->length));
|
|
|
- if (ch_end > skb_tail_pointer(skb))
|
|
|
- return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
|
|
|
- commands);
|
|
|
-
|
|
|
ch = (sctp_chunkhdr_t *) ch_end;
|
|
|
} while (ch_end < skb_tail_pointer(skb));
|
|
|
|