diff mbox series

Fixes dropping of small packets in bridge nat

Message ID 585B71F7B267D04784B84104A88F7DEE0DB503A6@OPEXCAUBM34.corporate.adroot.infra.ftgroup
State Accepted
Delegated to: Pablo Neira
Headers show
Series Fixes dropping of small packets in bridge nat | expand

Commit Message

timothee.cocault@orange.com Oct. 14, 2020, 12:36 p.m. UTC
Fixes an error causing small packets to get dropped. skb_ensure_writable
expects the second parameter to be a length in the ethernet payload. 
If we want to write the ethernet header (src, dst), we should pass 0.
Otherwise, packets with small payloads (< ETH_ALEN) will get dropped.

Signed-off-by: Timothée COCAULT <timothee.cocault@orange.com>
---
 net/bridge/netfilter/ebt_dnat.c     | 2 +-
 net/bridge/netfilter/ebt_redirect.c | 2 +-
 net/bridge/netfilter/ebt_snat.c     | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

 	ether_addr_copy(eth_hdr(skb)->h_source, info->mac);

Comments

Florian Westphal Oct. 14, 2020, 12:47 p.m. UTC | #1
timothee.cocault@orange.com <timothee.cocault@orange.com> wrote:
> Fixes an error causing small packets to get dropped. skb_ensure_writable
> expects the second parameter to be a length in the ethernet payload. 
> If we want to write the ethernet header (src, dst), we should pass 0.
> Otherwise, packets with small payloads (< ETH_ALEN) will get dropped.

Reviewed-by: Florian Westphal <fw@strlen.de>
Pablo Neira Ayuso Oct. 20, 2020, 3:18 p.m. UTC | #2
On Wed, Oct 14, 2020 at 12:36:15PM +0000, timothee.cocault@orange.com wrote:
> Fixes an error causing small packets to get dropped. skb_ensure_writable
> expects the second parameter to be a length in the ethernet payload. 
> If we want to write the ethernet header (src, dst), we should pass 0.
> Otherwise, packets with small payloads (< ETH_ALEN) will get dropped.

Applied, thanks.
diff mbox series

Patch

diff --git a/net/bridge/netfilter/ebt_dnat.c
b/net/bridge/netfilter/ebt_dnat.c
index 12a4f4d93681..3fda71a8579d 100644
--- a/net/bridge/netfilter/ebt_dnat.c
+++ b/net/bridge/netfilter/ebt_dnat.c
@@ -21,7 +21,7 @@  ebt_dnat_tg(struct sk_buff *skb, const struct
xt_action_param *par)
 {
 	const struct ebt_nat_info *info = par->targinfo;
 
-	if (skb_ensure_writable(skb, ETH_ALEN))
+	if (skb_ensure_writable(skb, 0))
 		return EBT_DROP;
 
 	ether_addr_copy(eth_hdr(skb)->h_dest, info->mac);
diff --git a/net/bridge/netfilter/ebt_redirect.c
b/net/bridge/netfilter/ebt_redirect.c
index 0cad62a4052b..307790562b49 100644
--- a/net/bridge/netfilter/ebt_redirect.c
+++ b/net/bridge/netfilter/ebt_redirect.c
@@ -21,7 +21,7 @@  ebt_redirect_tg(struct sk_buff *skb, const struct
xt_action_param *par)
 {
 	const struct ebt_redirect_info *info = par->targinfo;
 
-	if (skb_ensure_writable(skb, ETH_ALEN))
+	if (skb_ensure_writable(skb, 0))
 		return EBT_DROP;
 
 	if (xt_hooknum(par) != NF_BR_BROUTING)
diff --git a/net/bridge/netfilter/ebt_snat.c
b/net/bridge/netfilter/ebt_snat.c
index 27443bf229a3..7dfbcdfc30e5 100644
--- a/net/bridge/netfilter/ebt_snat.c
+++ b/net/bridge/netfilter/ebt_snat.c
@@ -22,7 +22,7 @@  ebt_snat_tg(struct sk_buff *skb, const struct
xt_action_param *par)
 {
 	const struct ebt_nat_info *info = par->targinfo;
 
-	if (skb_ensure_writable(skb, ETH_ALEN * 2))
+	if (skb_ensure_writable(skb, 0))
 		return EBT_DROP;