On 08/24/2015 06:07 AM, Xin Long wrote: > currently, we sctp_walk_params(), if we encounter the address parameter, we > will > skip them, we do not care about how many addr params are there. > > but the params of ASCONF chunk should consist of one *Address Parameter* and > one > or more *ASCONF Parameters*. > > so we will process multiple address parameters as unrecognized parameter and > send error cause to peer. > > Signed-off-by: Xin Long <lucien....@gmail.com> > --- > net/sctp/sm_make_chunk.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c > index 06320c8..0ee5ca7 100644 > --- a/net/sctp/sm_make_chunk.c > +++ b/net/sctp/sm_make_chunk.c > @@ -3217,10 +3217,18 @@ struct sctp_chunk *sctp_process_asconf(struct > sctp_association *asoc, > > /* Process the TLVs contained within the ASCONF chunk. */ > sctp_walk_params(param, addip, addip_hdr.params) { > - /* Skip preceeding address parameters. */ > + /* Skip preceeding address parameters. > + * process multi-addrparam as unrecognized parameters > + */ > if (param.p->type == SCTP_PARAM_IPV4_ADDRESS || > - param.p->type == SCTP_PARAM_IPV6_ADDRESS) > + param.p->type == SCTP_PARAM_IPV6_ADDRESS) { > + if(param.addr != addr_param) { > + all_param_pass = false; > + sctp_add_asconf_response(asconf_ack, 0, > + SCTP_ERROR_UNKNOWN_PARAM, param.v); > + } > continue; > + } >
I think it would be much better to catch this in the validation stage. If an implementation inserts multiple address parameters, we don't really know which one we should be using. -vlad > err_code = sctp_process_asconf_param(asoc, asconf, > param.addip); > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html