Subject: Re: nf_conntrack_h323: Fix locking in process_urq

From: Florian Westphal <[email-masked]>
Date: Fri, 15 Jan 2016 23:42:33 +0100

Sebastian Pöhn <[email-masked]> wrote:

[ CC netfilter-devel ]

> nf_ct_remove_expectations has to be called under nf_conntrack_expect_lock

But nf_ct_remove_expectations grabs that lock?

Added in:

commit ca7433df3a672efc88e08222cfa4b3aa965ca324
Author: Jesper Dangaard Brouer <[email-masked]>
netfilter: conntrack: seperate expect locking from nf_conntrack_lock

> diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c
> index 9511af0..d477375 100644
> --- a/net/netfilter/nf_conntrack_h323_main.c
> +++ b/net/netfilter/nf_conntrack_h323_main.c
> @@ -1518,7 +1518,9 @@ static int process_urq(struct sk_buff *skb, struct nf_conn *ct,
>         }
>  
>         /* Clear old expect */
> +       spin_lock_bh(&nf_conntrack_expect_lock);
>         nf_ct_remove_expectations(ct);

... so I'd expect deadlock.