|
Denis Kirjanov |
917a7d |
From b1eef66295a6c4f4f42b235592b339a8fa0d067c Mon Sep 17 00:00:00 2001
|
|
Denis Kirjanov |
917a7d |
From: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
|
|
Denis Kirjanov |
917a7d |
Date: Mon, 8 Jan 2018 19:02:29 -0200
|
|
Denis Kirjanov |
917a7d |
Subject: [PATCH 5/7] sctp: make use of pre-calculated len
|
|
Denis Kirjanov |
917a7d |
Git-commit: c76f97c99ae6d26d14c7f0e50e074382bfbc9f98
|
|
Denis Kirjanov |
917a7d |
Patch-mainline: 4.15-rc8
|
|
Denis Kirjanov |
917a7d |
References: git-fixes
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
Some sockopt handling functions were calculating the length of the
|
|
Denis Kirjanov |
917a7d |
buffer to be written to userspace and then calculating it again when
|
|
Denis Kirjanov |
917a7d |
actually writing the buffer, which could lead to some write not using
|
|
Denis Kirjanov |
917a7d |
an up-to-date length.
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
This patch updates such places to just make use of the len variable.
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
Also, replace some sizeof(type) to sizeof(var).
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
|
|
Denis Kirjanov |
917a7d |
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Denis Kirjanov |
917a7d |
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
|
|
Denis Kirjanov |
917a7d |
---
|
|
Denis Kirjanov |
917a7d |
net/sctp/socket.c | 16 ++++++++++------
|
|
Denis Kirjanov |
917a7d |
1 file changed, 10 insertions(+), 6 deletions(-)
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
|
|
Denis Kirjanov |
917a7d |
index 4713dd8f5ecf..7e2914216f0f 100644
|
|
Denis Kirjanov |
917a7d |
--- a/net/sctp/socket.c
|
|
Denis Kirjanov |
917a7d |
+++ b/net/sctp/socket.c
|
|
Denis Kirjanov |
917a7d |
@@ -4983,7 +4983,7 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
|
|
Denis Kirjanov |
917a7d |
len = sizeof(int);
|
|
Denis Kirjanov |
917a7d |
if (put_user(len, optlen))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
- if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int)))
|
|
Denis Kirjanov |
917a7d |
+ if (copy_to_user(optval, &sctp_sk(sk)->autoclose, len))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
return 0;
|
|
Denis Kirjanov |
917a7d |
}
|
|
Denis Kirjanov |
917a7d |
@@ -5560,6 +5560,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
|
|
Denis Kirjanov |
917a7d |
err = -EFAULT;
|
|
Denis Kirjanov |
917a7d |
goto out;
|
|
Denis Kirjanov |
917a7d |
}
|
|
Denis Kirjanov |
917a7d |
+ /* XXX: We should have accounted for sizeof(struct sctp_getaddrs) too,
|
|
Denis Kirjanov |
917a7d |
+ * but we can't change it anymore.
|
|
Denis Kirjanov |
917a7d |
+ */
|
|
Denis Kirjanov |
917a7d |
if (put_user(bytes_copied, optlen))
|
|
Denis Kirjanov |
917a7d |
err = -EFAULT;
|
|
Denis Kirjanov |
917a7d |
out:
|
|
Denis Kirjanov |
917a7d |
@@ -5996,7 +5999,7 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len,
|
|
Denis Kirjanov |
917a7d |
params.assoc_id = 0;
|
|
Denis Kirjanov |
917a7d |
} else if (len >= sizeof(struct sctp_assoc_value)) {
|
|
Denis Kirjanov |
917a7d |
len = sizeof(struct sctp_assoc_value);
|
|
Denis Kirjanov |
917a7d |
- if (copy_from_user(¶ms, optval, sizeof(params)))
|
|
Denis Kirjanov |
917a7d |
+ if (copy_from_user(¶ms, optval, len))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
} else
|
|
Denis Kirjanov |
917a7d |
return -EINVAL;
|
|
Denis Kirjanov |
917a7d |
@@ -6165,7 +6168,9 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
if (len < sizeof(struct sctp_authkeyid))
|
|
Denis Kirjanov |
917a7d |
return -EINVAL;
|
|
Denis Kirjanov |
917a7d |
- if (copy_from_user(&val, optval, sizeof(struct sctp_authkeyid)))
|
|
Denis Kirjanov |
917a7d |
+
|
|
Denis Kirjanov |
917a7d |
+ len = sizeof(struct sctp_authkeyid);
|
|
Denis Kirjanov |
917a7d |
+ if (copy_from_user(&val, optval, len))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
asoc = sctp_id2assoc(sk, val.scact_assoc_id);
|
|
Denis Kirjanov |
917a7d |
@@ -6177,7 +6182,6 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
|
|
Denis Kirjanov |
917a7d |
else
|
|
Denis Kirjanov |
917a7d |
val.scact_keynumber = ep->active_key_id;
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
- len = sizeof(struct sctp_authkeyid);
|
|
Denis Kirjanov |
917a7d |
if (put_user(len, optlen))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
if (copy_to_user(optval, &val, len))
|
|
Denis Kirjanov |
917a7d |
@@ -6203,7 +6207,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
|
|
Denis Kirjanov |
917a7d |
if (len < sizeof(struct sctp_authchunks))
|
|
Denis Kirjanov |
917a7d |
return -EINVAL;
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
- if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks)))
|
|
Denis Kirjanov |
917a7d |
+ if (copy_from_user(&val, optval, sizeof(val)))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
to = p->gauth_chunks;
|
|
Denis Kirjanov |
917a7d |
@@ -6248,7 +6252,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
|
|
Denis Kirjanov |
917a7d |
if (len < sizeof(struct sctp_authchunks))
|
|
Denis Kirjanov |
917a7d |
return -EINVAL;
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
- if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks)))
|
|
Denis Kirjanov |
917a7d |
+ if (copy_from_user(&val, optval, sizeof(val)))
|
|
Denis Kirjanov |
917a7d |
return -EFAULT;
|
|
Denis Kirjanov |
917a7d |
|
|
Denis Kirjanov |
917a7d |
to = p->gauth_chunks;
|
|
Denis Kirjanov |
917a7d |
--
|
|
Denis Kirjanov |
917a7d |
2.16.4
|
|
Denis Kirjanov |
917a7d |
|