Message ID | 1365187325-25147-1-git-send-email-kaber@trash.net |
---|---|
State | Accepted |
Headers | show |
From: Patrick McHardy <kaber@trash.net> Date: Fri, 5 Apr 2013 20:42:05 +0200 > Commit 130549fe added code to reset nf_trace in nf_reset(). This is wrong > and unnecessary. > > nf_reset() is used in the following cases: > > - when passing packets up the the socket layer, at which point we want to > release all netfilter references that might keep modules pinned while > the packet is queued. nf_trace doesn't matter anymore at this point. > > - when encapsulating or decapsulating IPsec packets. We want to continue > tracing these packets after IPsec processing. > > - when passing packets through virtual network devices. Only devices on > that encapsulate in IPv4/v6 matter since otherwise nf_trace is not > used anymore. Its not entirely clear whether those packets should > be traced after that, however we've always done that. > > - when passing packets through virtual network devices that make the > packet cross network namespace boundaries. This is the only cases > where we clearly want to reset nf_trace and is also what the > original patch intended to fix. > > Add a new function nf_reset_trace() and use it in dev_forward_skb() to > fix this properly. > > Signed-off-by: Patrick McHardy <kaber@trash.net> I'll apply this directly because I'm trying to get a pull request out to Linus. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 04/05/2013 10:42 PM, Patrick McHardy wrote: > Commit 130549fe Please also specify the summary line of this commit in parens. David M. also seems to require it to be enclosed in quotes inside parens... > added code to reset nf_trace in nf_reset(). This is wrong > and unnecessary. > > nf_reset() is used in the following cases: > > - when passing packets up the the socket layer, at which point we want to > release all netfilter references that might keep modules pinned while > the packet is queued. nf_trace doesn't matter anymore at this point. > > - when encapsulating or decapsulating IPsec packets. We want to continue > tracing these packets after IPsec processing. > > - when passing packets through virtual network devices. Only devices on > that encapsulate in IPv4/v6 matter since otherwise nf_trace is not > used anymore. Its not entirely clear whether those packets should > be traced after that, however we've always done that. > > - when passing packets through virtual network devices that make the > packet cross network namespace boundaries. This is the only cases > where we clearly want to reset nf_trace and is also what the > original patch intended to fix. > > Add a new function nf_reset_trace() and use it in dev_forward_skb() to > fix this properly. > > Signed-off-by: Patrick McHardy <kaber@trash.net> > WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> schrieb: >On 04/05/2013 10:42 PM, Patrick McHardy wrote: > >> Commit 130549fe > > Please also specify the summary line of this commit in parens. >David M. also seems to require it to be enclosed in quotes inside >parens... I thought I did. Well, apparently I forgot. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2013/04/06 02:42, Patrick McHardy wrote: > Commit 130549fe added code to reset nf_trace in nf_reset(). This is wrong > and unnecessary. > > nf_reset() is used in the following cases: > > - when passing packets up the the socket layer, at which point we want to > release all netfilter references that might keep modules pinned while > the packet is queued. nf_trace doesn't matter anymore at this point. > > - when encapsulating or decapsulating IPsec packets. We want to continue > tracing these packets after IPsec processing. > > - when passing packets through virtual network devices. Only devices on > that encapsulate in IPv4/v6 matter since otherwise nf_trace is not > used anymore. Its not entirely clear whether those packets should > be traced after that, however we've always done that. > > - when passing packets through virtual network devices that make the > packet cross network namespace boundaries. This is the only cases > where we clearly want to reset nf_trace and is also what the > original patch intended to fix. > > Add a new function nf_reset_trace() and use it in dev_forward_skb() to > fix this properly. > > Signed-off-by: Patrick McHardy <kaber@trash.net> Ok, I was confused by the nf_*reset*... This patch is more proper,Since my commit will change the behavior of TRACE in some case. Thanks for your fix and explanation. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 72b3967..b8292d8 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -2641,6 +2641,10 @@ static inline void nf_reset(struct sk_buff *skb) nf_bridge_put(skb->nf_bridge); skb->nf_bridge = NULL; #endif +} + +static inline void nf_reset_trace(struct sk_buff *skb) +{ #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) skb->nf_trace = 0; #endif diff --git a/net/core/dev.c b/net/core/dev.c index 13e6447..e7d68ed 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1639,6 +1639,7 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb) skb->mark = 0; secpath_reset(skb); nf_reset(skb); + nf_reset_trace(skb); return netif_rx(skb); } EXPORT_SYMBOL_GPL(dev_forward_skb);
Commit 130549fe added code to reset nf_trace in nf_reset(). This is wrong and unnecessary. nf_reset() is used in the following cases: - when passing packets up the the socket layer, at which point we want to release all netfilter references that might keep modules pinned while the packet is queued. nf_trace doesn't matter anymore at this point. - when encapsulating or decapsulating IPsec packets. We want to continue tracing these packets after IPsec processing. - when passing packets through virtual network devices. Only devices on that encapsulate in IPv4/v6 matter since otherwise nf_trace is not used anymore. Its not entirely clear whether those packets should be traced after that, however we've always done that. - when passing packets through virtual network devices that make the packet cross network namespace boundaries. This is the only cases where we clearly want to reset nf_trace and is also what the original patch intended to fix. Add a new function nf_reset_trace() and use it in dev_forward_skb() to fix this properly. Signed-off-by: Patrick McHardy <kaber@trash.net> --- include/linux/skbuff.h | 4 ++++ net/core/dev.c | 1 + 2 files changed, 5 insertions(+)