mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
sctp: make use of pre-calculated len
Some sockopt handling functions were calculating the length of the buffer to be written to userspace and then calculating it again when actually writing the buffer, which could lead to some write not using an up-to-date length. This patch updates such places to just make use of the len variable. Also, replace some sizeof(type) to sizeof(var). Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5960cefab9
commit
c76f97c99a
@ -5025,7 +5025,7 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
|
|||||||
len = sizeof(int);
|
len = sizeof(int);
|
||||||
if (put_user(len, optlen))
|
if (put_user(len, optlen))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int)))
|
if (copy_to_user(optval, &sctp_sk(sk)->autoclose, len))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -5655,6 +5655,9 @@ copy_getaddrs:
|
|||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
/* XXX: We should have accounted for sizeof(struct sctp_getaddrs) too,
|
||||||
|
* but we can't change it anymore.
|
||||||
|
*/
|
||||||
if (put_user(bytes_copied, optlen))
|
if (put_user(bytes_copied, optlen))
|
||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
out:
|
out:
|
||||||
@ -6091,7 +6094,7 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len,
|
|||||||
params.assoc_id = 0;
|
params.assoc_id = 0;
|
||||||
} else if (len >= sizeof(struct sctp_assoc_value)) {
|
} else if (len >= sizeof(struct sctp_assoc_value)) {
|
||||||
len = sizeof(struct sctp_assoc_value);
|
len = sizeof(struct sctp_assoc_value);
|
||||||
if (copy_from_user(¶ms, optval, sizeof(params)))
|
if (copy_from_user(¶ms, optval, len))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
} else
|
} else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -6261,7 +6264,9 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
|
|||||||
|
|
||||||
if (len < sizeof(struct sctp_authkeyid))
|
if (len < sizeof(struct sctp_authkeyid))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (copy_from_user(&val, optval, sizeof(struct sctp_authkeyid)))
|
|
||||||
|
len = sizeof(struct sctp_authkeyid);
|
||||||
|
if (copy_from_user(&val, optval, len))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
asoc = sctp_id2assoc(sk, val.scact_assoc_id);
|
asoc = sctp_id2assoc(sk, val.scact_assoc_id);
|
||||||
@ -6273,7 +6278,6 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
|
|||||||
else
|
else
|
||||||
val.scact_keynumber = ep->active_key_id;
|
val.scact_keynumber = ep->active_key_id;
|
||||||
|
|
||||||
len = sizeof(struct sctp_authkeyid);
|
|
||||||
if (put_user(len, optlen))
|
if (put_user(len, optlen))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
if (copy_to_user(optval, &val, len))
|
if (copy_to_user(optval, &val, len))
|
||||||
@ -6299,7 +6303,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
|
|||||||
if (len < sizeof(struct sctp_authchunks))
|
if (len < sizeof(struct sctp_authchunks))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks)))
|
if (copy_from_user(&val, optval, sizeof(val)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
to = p->gauth_chunks;
|
to = p->gauth_chunks;
|
||||||
@ -6344,7 +6348,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
|
|||||||
if (len < sizeof(struct sctp_authchunks))
|
if (len < sizeof(struct sctp_authchunks))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks)))
|
if (copy_from_user(&val, optval, sizeof(val)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
to = p->gauth_chunks;
|
to = p->gauth_chunks;
|
||||||
|
Loading…
Reference in New Issue
Block a user