|
|
@@ -164,7 +164,7 @@ static void sctp_datamsg_assign(struct sctp_datamsg *msg, struct sctp_chunk *chu
|
|
|
*/
|
|
|
struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
|
|
|
struct sctp_sndrcvinfo *sinfo,
|
|
|
- struct msghdr *msgh, int msg_len)
|
|
|
+ struct iov_iter *from)
|
|
|
{
|
|
|
int max, whole, i, offset, over, err;
|
|
|
int len, first_len;
|
|
|
@@ -172,6 +172,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
|
|
|
struct sctp_chunk *chunk;
|
|
|
struct sctp_datamsg *msg;
|
|
|
struct list_head *pos, *temp;
|
|
|
+ size_t msg_len = iov_iter_count(from);
|
|
|
__u8 frag;
|
|
|
|
|
|
msg = sctp_datamsg_new(GFP_KERNEL);
|
|
|
@@ -279,12 +280,10 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
|
|
|
goto errout;
|
|
|
}
|
|
|
|
|
|
- err = sctp_user_addto_chunk(chunk, offset, len, msgh->msg_iov);
|
|
|
+ err = sctp_user_addto_chunk(chunk, len, from);
|
|
|
if (err < 0)
|
|
|
goto errout_chunk_free;
|
|
|
|
|
|
- offset += len;
|
|
|
-
|
|
|
/* Put the chunk->skb back into the form expected by send. */
|
|
|
__skb_pull(chunk->skb, (__u8 *)chunk->chunk_hdr
|
|
|
- (__u8 *)chunk->skb->data);
|
|
|
@@ -317,7 +316,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
|
|
|
goto errout;
|
|
|
}
|
|
|
|
|
|
- err = sctp_user_addto_chunk(chunk, offset, over, msgh->msg_iov);
|
|
|
+ err = sctp_user_addto_chunk(chunk, over, from);
|
|
|
|
|
|
/* Put the chunk->skb back into the form expected by send. */
|
|
|
__skb_pull(chunk->skb, (__u8 *)chunk->chunk_hdr
|