On Thu, Aug 04, 2005 at 05:48:17PM -0700, Arthur Kepner wrote: > > @@ -366,6 +376,9 @@ static struct ipq *ip_frag_create(unsign > qp->meat = 0; > qp->fragments = NULL; > qp->iif = 0; > + qp->peer = sysctl_ipfrag_max_dist ? inet_getpeer(iph->saddr, 1) : NULL; > + if (qp->peer) > + qp->rid = atomic_read(&qp->peer->rid);
This fix is not needed. The rid was set below in ip_frag_too_far which is called from ip_frag_queue. > @@ -410,6 +423,63 @@ static inline struct ipq *ip_find(struct > return ip_frag_create(hash, iph, user); > } > > +/* Is the fragment too far ahead to be part of ipq? */ > +static inline int ip_frag_too_far(struct ipq *qp) > +{ > + struct inet_peer *peer = qp->peer; > + unsigned int max = sysctl_ipfrag_max_dist; > + unsigned int start, end; > + > + int rc; > + > + if (!peer || !max) > + return 0; > + > + start = ++qp->rid; > + end = atomic_inc_return(&peer->rid); I'm not sure I understand the benefit of this change either. > + rc = qp->fragments && (end - start) >= max; > + > + if (rc) { > + IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); > + } This is good. > +static int ip_frag_reinit(struct ipq *qp) > + if (sysctl_ipfrag_max_dist) { > + if (qp->peer == NULL) { > + qp->peer = inet_getpeer(qp->saddr, 1); > + } > + if (qp->peer) { > + qp->rid = atomic_read(&qp->peer->rid); > + } > + } This is unnecessary since we're taking over an existing qp whose parameters are exactly the same as the new fragment. > @@ -50,6 +51,7 @@ extern int inet_peer_gc_mintime; > extern int inet_peer_gc_maxtime; > > #ifdef CONFIG_SYSCTL > +static int zero; > static int tcp_retr1_max = 255; > static int ip_local_port_range_min[] = { 1, 1 }; > static int ip_local_port_range_max[] = { 65535, 65535 }; > @@ -643,6 +645,15 @@ ctl_table ipv4_table[] = { > .strategy = &sysctl_jiffies > }, > { > + .ctl_name = NET_IPV4_IPFRAG_MAX_DIST, > + .procname = "ipfrag_max_dist", > + .data = &sysctl_ipfrag_max_dist, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = &proc_dointvec_minmax, > + .extra1 = &zero > + }, Good catch. Thanks, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html