netfilter: conntrack: replace notify chain by function pointer
This patch removes the notify chain infrastructure and replace it by a simple function pointer. This issue has been mentioned in the mailing list several times: the use of the notify chain adds too much overhead for something that is only used by ctnetlink. This patch also changes nfnetlink_send(). It seems that gfp_any() returns GFP_KERNEL for user-context request, like those via ctnetlink, inside the RCU read-side section which is not valid. Using GFP_KERNEL is also evil since netlink may schedule(), this leads to "scheduling while atomic" bug reports. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
@@ -107,9 +107,10 @@ int nfnetlink_has_listeners(unsigned int group)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfnetlink_has_listeners);
|
||||
|
||||
int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, int echo)
|
||||
int nfnetlink_send(struct sk_buff *skb, u32 pid,
|
||||
unsigned group, int echo, gfp_t flags)
|
||||
{
|
||||
return nlmsg_notify(nfnl, skb, pid, group, echo, gfp_any());
|
||||
return nlmsg_notify(nfnl, skb, pid, group, echo, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfnetlink_send);
|
||||
|
||||
|
Reference in New Issue
Block a user