1. 16 Jul, 2009 2 commits
    • Eric Dumazet's avatar
      netfilter: nf_conntrack: nf_conntrack_alloc() fixes · 941297f4
      Eric Dumazet authored
      When a slab cache uses SLAB_DESTROY_BY_RCU, we must be careful when allocating
      objects, since slab allocator could give a freed object still used by lockless
      readers.
      
      In particular, nf_conntrack RCU lookups rely on ct->tuplehash[xxx].hnnode.next
      being always valid (ie containing a valid 'nulls' value, or a valid pointer to next
      object in hash chain.)
      
      kmem_cache_zalloc() setups object with NULL values, but a NULL value is not valid
      for ct->tuplehash[xxx].hnnode.next.
      
      Fix is to call kmem_cache_alloc() and do the zeroing ourself.
      
      As spotted by Patrick, we also need to make sure lookup keys are committed to
      memory before setting refcount to 1, or a lockless reader could get a reference
      on the old version of the object. Its key re-check could then pass the barrier.
      Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
      941297f4
    • Patrick McHardy's avatar
      netfilter: xt_osf: fix nf_log_packet() arguments · aa6a03eb
      Patrick McHardy authored
      The first argument is the address family, the second one the hook
      number.
      Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
      aa6a03eb
  2. 01 Jul, 2009 1 commit
  3. 29 Jun, 2009 3 commits
  4. 25 Jun, 2009 1 commit
    • Jesper Dangaard Brouer's avatar
      nf_conntrack: Use rcu_barrier() · 308ff823
      Jesper Dangaard Brouer authored
      RCU barriers, rcu_barrier(), is inserted two places.
      
       In nf_conntrack_expect.c nf_conntrack_expect_fini() before the
       kmem_cache_destroy().  Firstly to make sure the callback to the
       nf_ct_expect_free_rcu() code is still around.  Secondly because I'm
       unsure about the consequence of having in flight
       nf_ct_expect_free_rcu/kmem_cache_free() calls while doing a
       kmem_cache_destroy() slab destroy.
      
       And in nf_conntrack_extend.c nf_ct_extend_unregister(), inorder to
       wait for completion of callbacks to __nf_ct_ext_free_rcu(), which is
       invoked by __nf_ct_ext_add().  It might be more efficient to call
       rcu_barrier() in nf_conntrack_core.c nf_conntrack_cleanup_net(), but
       thats make it more difficult to read the code (as the callback code
       in located in nf_conntrack_extend.c).
      Signed-off-by: default avatarJesper Dangaard Brouer <hawk@comx.dk>
      Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
      308ff823
  5. 24 Jun, 2009 33 commits