On Mon, Jan 28, 2019 at 03:08:24PM +0800, Xin Long wrote: > Check with SCTP_FUTURE_ASSOC instead in > sctp_/setgetsockopt_peer_addr_params, it's compatible with 0. > > Signed-off-by: Xin Long <lucien.xin@xxxxxxxxx> > --- > 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 > + 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 > >