diff options
Diffstat (limited to 'include/net/sctp')
| -rw-r--r-- | include/net/sctp/sctp.h | 4 | 
1 files changed, 4 insertions, 0 deletions
| diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index a9519a06a23b..45fd4c6056b5 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h @@ -469,6 +469,8 @@ _sctp_walk_params((pos), (chunk), ntohs((chunk)->chunk_hdr.length), member)  #define _sctp_walk_params(pos, chunk, end, member)\  for (pos.v = chunk->member;\ +     (pos.v + offsetof(struct sctp_paramhdr, length) + sizeof(pos.p->length) <=\ +      (void *)chunk + end) &&\       pos.v <= (void *)chunk + end - ntohs(pos.p->length) &&\       ntohs(pos.p->length) >= sizeof(struct sctp_paramhdr);\       pos.v += SCTP_PAD4(ntohs(pos.p->length))) @@ -479,6 +481,8 @@ _sctp_walk_errors((err), (chunk_hdr), ntohs((chunk_hdr)->length))  #define _sctp_walk_errors(err, chunk_hdr, end)\  for (err = (sctp_errhdr_t *)((void *)chunk_hdr + \  	    sizeof(struct sctp_chunkhdr));\ +     ((void *)err + offsetof(sctp_errhdr_t, length) + sizeof(err->length) <=\ +      (void *)chunk_hdr + end) &&\       (void *)err <= (void *)chunk_hdr + end - ntohs(err->length) &&\       ntohs(err->length) >= sizeof(sctp_errhdr_t); \       err = (sctp_errhdr_t *)((void *)err + SCTP_PAD4(ntohs(err->length)))) |