Message ID | 1283979861.2479.21.camel@Joe-Laptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On 09/08/2010 05:04 PM, Joe Perches wrote: > Perhaps something like this is clearer? > > Add a list_has_sctp_addr function to simplify loop > > Based on a patches by Dan Carpenter and David Miller > > Signed-off-by: Joe Perches <joe@perches.com> Thanks Joe I like this. Nice and clean. :) Acked-by: Vlad Yasevich <vladislav.yasevich@hp.com> -vlad > --- > net/sctp/sm_statefuns.c | 46 +++++++++++++++++++++++----------------------- > 1 files changed, 23 insertions(+), 23 deletions(-) > > diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c > index 8b28443..4b4eb7c 100644 > --- a/net/sctp/sm_statefuns.c > +++ b/net/sctp/sm_statefuns.c > @@ -1232,6 +1232,18 @@ out: > return 0; > } > > +static bool list_has_sctp_addr(const struct list_head *list, > + union sctp_addr *ipaddr) > +{ > + struct sctp_transport *addr; > + > + list_for_each_entry(addr, list, transports) { > + if (sctp_cmp_addr_exact(ipaddr, &addr->ipaddr)) > + return true; > + } > + > + return false; > +} > /* A restart is occurring, check to make sure no new addresses > * are being added as we may be under a takeover attack. > */ > @@ -1240,10 +1252,10 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc, > struct sctp_chunk *init, > sctp_cmd_seq_t *commands) > { > - struct sctp_transport *new_addr, *addr; > - int found; > + struct sctp_transport *new_addr; > + int ret = 1; > > - /* Implementor's Guide - Sectin 5.2.2 > + /* Implementor's Guide - Section 5.2.2 > * ... > * Before responding the endpoint MUST check to see if the > * unexpected INIT adds new addresses to the association. If new > @@ -1254,31 +1266,19 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc, > /* Search through all current addresses and make sure > * we aren't adding any new ones. > */ > - new_addr = NULL; > - found = 0; > - > list_for_each_entry(new_addr, &new_asoc->peer.transport_addr_list, > - transports) { > - found = 0; > - list_for_each_entry(addr, &asoc->peer.transport_addr_list, > - transports) { > - if (sctp_cmp_addr_exact(&new_addr->ipaddr, > - &addr->ipaddr)) { > - found = 1; > - break; > - } > - } > - if (!found) > + transports) { > + if (!list_has_sctp_addr(&asoc->peer.transport_addr_list, > + &new_addr->ipaddr)) { > + sctp_sf_send_restart_abort(&new_addr->ipaddr, init, > + commands); > + ret = 0; > break; > - } > - > - /* If a new address was added, ABORT the sender. */ > - if (!found && new_addr) { > - sctp_sf_send_restart_abort(&new_addr->ipaddr, init, commands); > + } > } > > /* Return success if all addresses were found. */ > - return found; > + return ret; > } > > /* Populate the verification/tie tags based on overlapping INIT > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Vlad Yasevich <vladislav.yasevich@hp.com> Date: Thu, 09 Sep 2010 09:57:31 -0400 > On 09/08/2010 05:04 PM, Joe Perches wrote: >> Perhaps something like this is clearer? >> >> Add a list_has_sctp_addr function to simplify loop >> >> Based on a patches by Dan Carpenter and David Miller >> >> Signed-off-by: Joe Perches <joe@perches.com> > > Thanks Joe > > I like this. Nice and clean. :) > > Acked-by: Vlad Yasevich <vladislav.yasevich@hp.com> Applied to net-2.6 since this is reasonably important bug fix. Thanks guys! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index 8b28443..4b4eb7c 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c @@ -1232,6 +1232,18 @@ out: return 0; } +static bool list_has_sctp_addr(const struct list_head *list, + union sctp_addr *ipaddr) +{ + struct sctp_transport *addr; + + list_for_each_entry(addr, list, transports) { + if (sctp_cmp_addr_exact(ipaddr, &addr->ipaddr)) + return true; + } + + return false; +} /* A restart is occurring, check to make sure no new addresses * are being added as we may be under a takeover attack. */ @@ -1240,10 +1252,10 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc, struct sctp_chunk *init, sctp_cmd_seq_t *commands) { - struct sctp_transport *new_addr, *addr; - int found; + struct sctp_transport *new_addr; + int ret = 1; - /* Implementor's Guide - Sectin 5.2.2 + /* Implementor's Guide - Section 5.2.2 * ... * Before responding the endpoint MUST check to see if the * unexpected INIT adds new addresses to the association. If new @@ -1254,31 +1266,19 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc, /* Search through all current addresses and make sure * we aren't adding any new ones. */ - new_addr = NULL; - found = 0; - list_for_each_entry(new_addr, &new_asoc->peer.transport_addr_list, - transports) { - found = 0; - list_for_each_entry(addr, &asoc->peer.transport_addr_list, - transports) { - if (sctp_cmp_addr_exact(&new_addr->ipaddr, - &addr->ipaddr)) { - found = 1; - break; - } - } - if (!found) + transports) { + if (!list_has_sctp_addr(&asoc->peer.transport_addr_list, + &new_addr->ipaddr)) { + sctp_sf_send_restart_abort(&new_addr->ipaddr, init, + commands); + ret = 0; break; - } - - /* If a new address was added, ABORT the sender. */ - if (!found && new_addr) { - sctp_sf_send_restart_abort(&new_addr->ipaddr, init, commands); + } } /* Return success if all addresses were found. */ - return found; + return ret; } /* Populate the verification/tie tags based on overlapping INIT
Perhaps something like this is clearer? Add a list_has_sctp_addr function to simplify loop Based on a patches by Dan Carpenter and David Miller Signed-off-by: Joe Perches <joe@perches.com> --- net/sctp/sm_statefuns.c | 46 +++++++++++++++++++++++----------------------- 1 files changed, 23 insertions(+), 23 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html