diff options
author | Sridhar Samudrala <sri@us.ibm.com> | 2006-08-22 14:50:39 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-08-22 15:52:23 -0400 |
commit | c164a9ba0a8870c5c9d353f63085319931d69f23 (patch) | |
tree | 7e315a50008d0310dd5572a62baef34ddba89988 /net/sctp/socket.c | |
parent | ac185bdc02c216040f3b83f654d864bd8a29cedc (diff) |
Fix sctp privilege elevation (CVE-2006-3745)
sctp_make_abort_user() now takes the msg_len along with the msg
so that we don't have to recalculate the bytes in iovec.
It also uses memcpy_fromiovec() so that we don't go beyond the
length allocated.
It is good to have this fix even if verify_iovec() is fixed to
return error on overflow.
Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r-- | net/sctp/socket.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 54722e622e6d..fde3f55bfd4b 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -1520,8 +1520,16 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
1520 | goto out_unlock; | 1520 | goto out_unlock; |
1521 | } | 1521 | } |
1522 | if (sinfo_flags & SCTP_ABORT) { | 1522 | if (sinfo_flags & SCTP_ABORT) { |
1523 | struct sctp_chunk *chunk; | ||
1524 | |||
1525 | chunk = sctp_make_abort_user(asoc, msg, msg_len); | ||
1526 | if (!chunk) { | ||
1527 | err = -ENOMEM; | ||
1528 | goto out_unlock; | ||
1529 | } | ||
1530 | |||
1523 | SCTP_DEBUG_PRINTK("Aborting association: %p\n", asoc); | 1531 | SCTP_DEBUG_PRINTK("Aborting association: %p\n", asoc); |
1524 | sctp_primitive_ABORT(asoc, msg); | 1532 | sctp_primitive_ABORT(asoc, chunk); |
1525 | err = 0; | 1533 | err = 0; |
1526 | goto out_unlock; | 1534 | goto out_unlock; |
1527 | } | 1535 | } |