Thread (3 messages) 3 messages, 2 authors, 2018-10-28

Re: [PATCH v2] sctp: socket.c validate sprstat_policy

From: Tomas Bortoli <hidden>
Date: 2018-10-28 08:42:13
Also in: linux-sctp, lkml

On 10/28/18 5:17 AM, Xin Long wrote:
On Sun, Oct 28, 2018 at 5:54 AM Tomas Bortoli [off-list ref] wrote:
quoted
It is possible to perform out-of-bound reads on
sctp_getsockopt_pr_streamstatus() and on
sctp_getsockopt_pr_assocstatus() by passing from userspace a
sprstat_policy that overflows the abandoned_sent/abandoned_unsent
fixed length arrays. The over-read data are directly copied/leaked
to userspace.

Signed-off-by: Tomas Bortoli <redacted>
Reported-by: syzbot+5da0d0a72a9e7d791748@syzkaller.appspotmail.com
---
 net/sctp/socket.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index fc0386e8ff23..14dce5d95817 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -7083,7 +7083,9 @@ static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,
        }

        policy = params.sprstat_policy;
-       if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
+       if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
+           __SCTP_PR_INDEX(policy) > SCTP_PR_INDEX(MAX) ||
+           __SCTP_PR_INDEX(policy) < 0)
                goto out;

        asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
@@ -7142,7 +7144,9 @@ static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
        }

        policy = params.sprstat_policy;
-       if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
+       if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
+           __SCTP_PR_INDEX(policy) > SCTP_PR_INDEX(MAX) ||
+           __SCTP_PR_INDEX(policy) < 0)
                goto out;
This is not the correct fix.
See https://lkml.org/lkml/2018/10/27/136
Ack, good to know ty!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help