diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-11-16 14:16:08 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-11-16 14:16:08 -0300 |
commit | 3326a1803802aa4730d32304b003f50720996b31 (patch) | |
tree | 1caa6541b94c3a6acb86cbc142d399598152b170 /net/sctp/output.c | |
parent | 29f5b648fa0b31ad614c78468b9279e5fa96397a (diff) |
Linux-libre 4.8.8-gnupck-4.8.8-gnu
Diffstat (limited to 'net/sctp/output.c')
-rw-r--r-- | net/sctp/output.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/sctp/output.c b/net/sctp/output.c index 31b7bc358..81929907a 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c @@ -417,6 +417,7 @@ int sctp_packet_transmit(struct sctp_packet *packet, gfp_t gfp) __u8 has_data = 0; int gso = 0; int pktcount = 0; + int auth_len = 0; struct dst_entry *dst; unsigned char *auth = NULL; /* pointer to auth in skb data */ @@ -505,7 +506,12 @@ int sctp_packet_transmit(struct sctp_packet *packet, gfp_t gfp) list_for_each_entry(chunk, &packet->chunk_list, list) { int padded = WORD_ROUND(chunk->skb->len); - if (pkt_size + padded > tp->pathmtu) + if (chunk == packet->auth) + auth_len = padded; + else if (auth_len + padded + packet->overhead > + tp->pathmtu) + goto nomem; + else if (pkt_size + padded > tp->pathmtu) break; pkt_size += padded; } |