diff options
| author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2013-01-15 15:58:25 -0500 | 
|---|---|---|
| committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2013-01-15 15:58:25 -0500 | 
| commit | 7bcc1ec07748cae3552dc9b46701c117926c8923 (patch) | |
| tree | 2b3edc7de77ca306b2559ae341077094bac8c4a2 /net/sctp/chunk.c | |
| parent | e5c702d3b268066dc70d619ecff06a08065f343f (diff) | |
| parent | 29594404d7fe73cd80eaa4ee8c43dcc53970c60e (diff) | |
| download | olio-linux-3.10-7bcc1ec07748cae3552dc9b46701c117926c8923.tar.xz olio-linux-3.10-7bcc1ec07748cae3552dc9b46701c117926c8923.zip  | |
Merge tag 'v3.7' into stable/for-linus-3.8
Linux 3.7
* tag 'v3.7': (833 commits)
  Linux 3.7
  Input: matrix-keymap - provide proper module license
  Revert "revert "Revert "mm: remove __GFP_NO_KSWAPD""" and associated damage
  ipv4: ip_check_defrag must not modify skb before unsharing
  Revert "mm: avoid waking kswapd for THP allocations when compaction is deferred or contended"
  inet_diag: validate port comparison byte code to prevent unsafe reads
  inet_diag: avoid unsafe and nonsensical prefix matches in inet_diag_bc_run()
  inet_diag: validate byte code to prevent oops in inet_diag_bc_run()
  inet_diag: fix oops for IPv4 AF_INET6 TCP SYN-RECV state
  mm: vmscan: fix inappropriate zone congestion clearing
  vfs: fix O_DIRECT read past end of block device
  net: gro: fix possible panic in skb_gro_receive()
  tcp: bug fix Fast Open client retransmission
  tmpfs: fix shared mempolicy leak
  mm: vmscan: do not keep kswapd looping forever due to individual uncompactable zones
  mm: compaction: validate pfn range passed to isolate_freepages_block
  mmc: sh-mmcif: avoid oops on spurious interrupts (second try)
  Revert misapplied "mmc: sh-mmcif: avoid oops on spurious interrupts"
  mmc: sdhci-s3c: fix missing clock for gpio card-detect
  lib/Makefile: Fix oid_registry build dependency
  ...
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Conflicts:
	arch/arm/xen/enlighten.c
	drivers/xen/Makefile
[We need to have the v3.7 base as the 'for-3.8' was based off v3.7-rc3
and there are some patches in v3.7-rc6 that we to have in our branch]
Diffstat (limited to 'net/sctp/chunk.c')
| -rw-r--r-- | net/sctp/chunk.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c index 7c2df9c33df..69ce21e3716 100644 --- a/net/sctp/chunk.c +++ b/net/sctp/chunk.c @@ -183,7 +183,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,  	msg = sctp_datamsg_new(GFP_KERNEL);  	if (!msg) -		return NULL; +		return ERR_PTR(-ENOMEM);  	/* Note: Calculate this outside of the loop, so that all fragments  	 * have the same expiration. @@ -280,11 +280,14 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,  		chunk = sctp_make_datafrag_empty(asoc, sinfo, len, frag, 0); -		if (!chunk) +		if (!chunk) { +			err = -ENOMEM;  			goto errout; +		} +  		err = sctp_user_addto_chunk(chunk, offset, len, msgh->msg_iov);  		if (err < 0) -			goto errout; +			goto errout_chunk_free;  		offset += len; @@ -315,8 +318,10 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,  		chunk = sctp_make_datafrag_empty(asoc, sinfo, over, frag, 0); -		if (!chunk) +		if (!chunk) { +			err = -ENOMEM;  			goto errout; +		}  		err = sctp_user_addto_chunk(chunk, offset, over,msgh->msg_iov); @@ -324,7 +329,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,  		__skb_pull(chunk->skb, (__u8 *)chunk->chunk_hdr  			   - (__u8 *)chunk->skb->data);  		if (err < 0) -			goto errout; +			goto errout_chunk_free;  		sctp_datamsg_assign(msg, chunk);  		list_add_tail(&chunk->frag_list, &msg->chunks); @@ -332,6 +337,9 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,  	return msg; +errout_chunk_free: +	sctp_chunk_free(chunk); +  errout:  	list_for_each_safe(pos, temp, &msg->chunks) {  		list_del_init(pos); @@ -339,7 +347,7 @@ errout:  		sctp_chunk_free(chunk);  	}  	sctp_datamsg_put(msg); -	return NULL; +	return ERR_PTR(err);  }  /* Check whether this message has expired. */  |