All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tobias DiPasquale <codeslinger@gmail.com>
To: Wang Jian <lark@linux.net.cn>
Cc: netfilter-devel@lists.netfilter.org
Subject: Re: double call to ip_conntrack_put() ?
Date: Mon, 18 Apr 2005 05:57:30 -0400	[thread overview]
Message-ID: <876ef97a05041802571f302bfe@mail.gmail.com> (raw)
In-Reply-To: <20050418171657.0370.LARK@linux.net.cn>

On 4/18/05, Wang Jian <lark@linux.net.cn> wrote:
> death_by_timeout() calls ip_conntrack_put() before return. And
> death_by_timeout() is called combined with ip_conntrack_put() in some
> places, such as
> 
> in early_drop()
> 
>         if (del_timer(&ct->timeout)) {
>                 death_by_timeout((unsigned long)ct);
>                 dropped = 1;
>                 CONNTRACK_STAT_INC(early_drop);
>         }
>         ip_conntrack_put(ct);
> 
> and in ip_ct_iterate_cleanup()
> 
>         while ((h = get_next_corpse(iter, data, &bucket)) != NULL) {
>                 struct ip_conntrack *ct = tuplehash_to_ctrack(h);
>                 /* Time to push up daises... */
>                 if (del_timer(&ct->timeout))
>                         death_by_timeout((unsigned long)ct);
>                 /* ... else the timer will get him soon. */
> 
>                 ip_conntrack_put(ct);
>         }
> 
> Is this intended or misuse?

This is intended. tuplehash_to_ctrack() generates a reference to the
conntrack record. In death_by_timeout() the refcount is decremented,
yielding 1 for the second call to ip_conntrack_put(). The dec_and_test
in nf_conntrack_put() (called by ip_conntrack_put()) will result in a
refcount of 0, sending the record to the destroy_conntrack() function
(or more properly, whatever's registered in nfct->destroy(), which I'm
pretty sure is always either NULL or destroy_conntrack()).

-- 
[ Tobias DiPasquale ]
0x636f6465736c696e67657240676d61696c2e636f6d

  parent reply	other threads:[~2005-04-18  9:57 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-18  9:29 double call to ip_conntrack_put() ? Wang Jian
2005-04-18  9:56 ` KOVACS Krisztian
2005-04-18  9:57 ` Tobias DiPasquale [this message]
2005-04-18 10:25   ` Wang Jian
2005-04-18 11:02   ` Amin Azez
2005-04-18 11:22     ` Tobias DiPasquale
2005-04-18 11:22     ` Wang Jian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=876ef97a05041802571f302bfe@mail.gmail.com \
    --to=codeslinger@gmail.com \
    --cc=lark@linux.net.cn \
    --cc=netfilter-devel@lists.netfilter.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.