Re: [PATCH net-next 02/24] sctp: use SCTP_FUTURE_ASSOC for SCTP_PEER_ADDR_PARAMS sockopt
From: Neil Horman <nhorman@tuxdriver.com>
Date: 2019-01-29 21:25:18
Also in:
linux-sctp
On Mon, Jan 28, 2019 at 03:08:24PM +0800, Xin Long wrote:
quoted hunk ↗ jump to hunk
Check with SCTP_FUTURE_ASSOC instead in sctp_/setgetsockopt_peer_addr_params, it's compatible with 0. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- net/sctp/socket.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)diff --git a/net/sctp/socket.c b/net/sctp/socket.c index a52d132..4c43b95 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c@@ -2750,12 +2750,13 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk, return -EINVAL; } - /* Get association, if assoc_id != 0 and the socket is a one - * to many style socket, and an association was not found, then - * the id was invalid. + /* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the + * socket is a one to many style socket, and an association + * was not found, then the id was invalid. */ asoc = sctp_id2assoc(sk, params.spp_assoc_id); - if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) + if (!asoc && params.spp_assoc_id != SCTP_FUTURE_ASSOC &&
Sorry to follow up, but I misspoke in my previous email, I should have said, why do we only allow future associations as the only special case association id here? Since the function is meant to set a specific association id, it seems to me that you would want to: a) allow setting of a specific id b) allow setting of all association ids on the socket (SCTP_CURRENT_ASSOC) c) allow recording of a set of params to apply to all current and future associations (FUTURE/ALL). (a) is already handled clearly, but (b) and (c) require more work on this function than just checking association id on entry. I think this comment may apply to all the socket option functions
quoted hunk ↗ jump to hunk
+ sctp_style(sk, UDP)) return -EINVAL; /* Heartbeat demand can only be sent on a transport or@@ -5676,12 +5677,13 @@ static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len, } } - /* Get association, if assoc_id != 0 and the socket is a one - * to many style socket, and an association was not found, then - * the id was invalid. + /* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the + * socket is a one to many style socket, and an association + * was not found, then the id was invalid. */ asoc = sctp_id2assoc(sk, params.spp_assoc_id); - if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) { + if (!asoc && params.spp_assoc_id != SCTP_FUTURE_ASSOC && + sctp_style(sk, UDP)) { pr_debug("%s: failed no association\n", __func__); return -EINVAL; }-- 2.1.0