diff options
Diffstat (limited to 'net/sctp/ulpevent.c')
-rw-r--r-- | net/sctp/ulpevent.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/sctp/ulpevent.c b/net/sctp/ulpevent.c index a1f654aea268..5f186ca550d7 100644 --- a/net/sctp/ulpevent.c +++ b/net/sctp/ulpevent.c | |||
@@ -713,7 +713,9 @@ struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, | |||
713 | /* Now that all memory allocations for this chunk succeeded, we | 713 | /* Now that all memory allocations for this chunk succeeded, we |
714 | * can mark it as received so the tsn_map is updated correctly. | 714 | * can mark it as received so the tsn_map is updated correctly. |
715 | */ | 715 | */ |
716 | sctp_tsnmap_mark(&asoc->peer.tsn_map, ntohl(chunk->subh.data_hdr->tsn)); | 716 | if (sctp_tsnmap_mark(&asoc->peer.tsn_map, |
717 | ntohl(chunk->subh.data_hdr->tsn))) | ||
718 | goto fail_mark; | ||
717 | 719 | ||
718 | /* First calculate the padding, so we don't inadvertently | 720 | /* First calculate the padding, so we don't inadvertently |
719 | * pass up the wrong length to the user. | 721 | * pass up the wrong length to the user. |
@@ -755,8 +757,12 @@ struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, | |||
755 | event->msg_flags |= chunk->chunk_hdr->flags; | 757 | event->msg_flags |= chunk->chunk_hdr->flags; |
756 | event->iif = sctp_chunk_iif(chunk); | 758 | event->iif = sctp_chunk_iif(chunk); |
757 | 759 | ||
758 | fail: | ||
759 | return event; | 760 | return event; |
761 | |||
762 | fail_mark: | ||
763 | kfree_skb(skb); | ||
764 | fail: | ||
765 | return NULL; | ||
760 | } | 766 | } |
761 | 767 | ||
762 | /* Create a partial delivery related event. | 768 | /* Create a partial delivery related event. |