Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
e0eb093e
Commit
e0eb093e
authored
Nov 15, 2014
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
switch sctp_user_addto_chunk() and sctp_datamsg_from_user() to passing iov_iter
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
8feb2fb2
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
17 deletions
+19
-17
include/net/sctp/structs.h
include/net/sctp/structs.h
+3
-3
net/sctp/chunk.c
net/sctp/chunk.c
+4
-5
net/sctp/sm_make_chunk.c
net/sctp/sm_make_chunk.c
+8
-8
net/sctp/socket.c
net/sctp/socket.c
+4
-1
No files found.
include/net/sctp/structs.h
View file @
e0eb093e
...
...
@@ -531,7 +531,7 @@ struct sctp_datamsg {
struct
sctp_datamsg
*
sctp_datamsg_from_user
(
struct
sctp_association
*
,
struct
sctp_sndrcvinfo
*
,
struct
msghdr
*
,
int
len
);
struct
iov_iter
*
);
void
sctp_datamsg_free
(
struct
sctp_datamsg
*
);
void
sctp_datamsg_put
(
struct
sctp_datamsg
*
);
void
sctp_chunk_fail
(
struct
sctp_chunk
*
,
int
error
);
...
...
@@ -647,8 +647,8 @@ struct sctp_chunk {
void
sctp_chunk_hold
(
struct
sctp_chunk
*
);
void
sctp_chunk_put
(
struct
sctp_chunk
*
);
int
sctp_user_addto_chunk
(
struct
sctp_chunk
*
chunk
,
int
off
,
int
len
,
struct
iov
ec
*
data
);
int
sctp_user_addto_chunk
(
struct
sctp_chunk
*
chunk
,
int
len
,
struct
iov
_iter
*
from
);
void
sctp_chunk_free
(
struct
sctp_chunk
*
);
void
*
sctp_addto_chunk
(
struct
sctp_chunk
*
,
int
len
,
const
void
*
data
);
struct
sctp_chunk
*
sctp_chunkify
(
struct
sk_buff
*
,
...
...
net/sctp/chunk.c
View file @
e0eb093e
...
...
@@ -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
,
o
ffset
,
over
,
msgh
->
msg_iov
);
err
=
sctp_user_addto_chunk
(
chunk
,
o
ver
,
from
);
/* Put the chunk->skb back into the form expected by send. */
__skb_pull
(
chunk
->
skb
,
(
__u8
*
)
chunk
->
chunk_hdr
...
...
net/sctp/sm_make_chunk.c
View file @
e0eb093e
...
...
@@ -1491,26 +1491,26 @@ static void *sctp_addto_chunk_fixed(struct sctp_chunk *chunk,
* chunk is not big enough.
* Returns a kernel err value.
*/
int
sctp_user_addto_chunk
(
struct
sctp_chunk
*
chunk
,
int
off
,
int
len
,
struct
iov
ec
*
data
)
int
sctp_user_addto_chunk
(
struct
sctp_chunk
*
chunk
,
int
len
,
struct
iov
_iter
*
from
)
{
__u8
*
target
;
int
err
=
0
;
void
*
target
;
ssize_t
copied
;
/* Make room in chunk for data. */
target
=
skb_put
(
chunk
->
skb
,
len
);
/* Copy data (whole iovec) into chunk */
if
((
err
=
memcpy_fromiovecend
(
target
,
data
,
off
,
len
)))
goto
out
;
copied
=
copy_from_iter
(
target
,
len
,
from
);
if
(
copied
!=
len
)
return
-
EFAULT
;
/* Adjust the chunk length field. */
chunk
->
chunk_hdr
->
length
=
htons
(
ntohs
(
chunk
->
chunk_hdr
->
length
)
+
len
);
chunk
->
chunk_end
=
skb_tail_pointer
(
chunk
->
skb
);
out:
return
err
;
return
0
;
}
/* Helper function to assign a TSN if needed. This assumes that both
...
...
net/sctp/socket.c
View file @
e0eb093e
...
...
@@ -1609,6 +1609,9 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
__u16
sinfo_flags
=
0
;
long
timeo
;
int
err
;
struct
iov_iter
from
;
iov_iter_init
(
&
from
,
WRITE
,
msg
->
msg_iov
,
msg
->
msg_iovlen
,
msg_len
);
err
=
0
;
sp
=
sctp_sk
(
sk
);
...
...
@@ -1947,7 +1950,7 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
}
/* Break the message into multiple chunks of maximum size. */
datamsg
=
sctp_datamsg_from_user
(
asoc
,
sinfo
,
msg
,
msg_len
);
datamsg
=
sctp_datamsg_from_user
(
asoc
,
sinfo
,
&
from
);
if
(
IS_ERR
(
datamsg
))
{
err
=
PTR_ERR
(
datamsg
);
goto
out_free
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment