Roberto Nibali wrote:
Hello,

I'm chasing down a nasty refcnt bug regarding connection tracking in 2.4.x kernels and since the nf_reset() patch for 2.6.x solving the same issue (commit: 9666dae51013b064e7d77fc36b5cee98dd167ed5) resulted in a major breakage of SO_ORIGINAL_DST support, a better patch was put in place (commit: 84531c24f27b02daa8e54e2bb6dc74a730fdf0a5). So far so good; I'd like to resolve the problem in 2.4.x as well but the last patch ported to 2.4.x does not help much.

So I started digging into nf_conntrack_{get,put} usage in both kernels and much to my surprise I found the following difference in core/skbuff.h:copy_skb_header:

2.6.x: nf_conntrack_get(old->nfct);
2.4.x: nf_conntrack_get(new->nfct);

Since the rest of the assignments match I was left wondering, which one is correct?

Both are fine.

2.4:
        new->nfct=old->nfct;
        nf_conntrack_get(new->nfct);
2.6:
        new->nfct       = old->nfct;
        nf_conntrack_get(old->nfct);

So in both cases the same reference is grabbed. Since the patch which
put a nf_reset in ip_finish_output2 helped, I suggest following the
code path from there and place nf_reset statements anywhere the
packet can take a path other than to the qdiscs, that should
help locating the problem.
-
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

Reply via email to