Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c1fcd51 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Greg Kroah-Hartman
Browse files

Revert "geneve: pull IP header before ECN decapsulation"



commit c02bd115b1d25931159f89c7d9bf47a30f5d4b41 upstream.

This reverts commit 4179b00c04d1 ("geneve: pull IP header before ECN decapsulation").

Eric says: "network header should have been pulled already before
hitting geneve_rx()". Let's revert the syzbot fix since it's causing
more harm than good, and revisit.

Suggested-by: default avatarEric Dumazet <edumazet@google.com>
Reported-by: default avatarJianlin Shi <jishi@redhat.com>
Fixes: 4179b00c04d1 ("geneve: pull IP header before ECN decapsulation")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=210569
Link: https://lore.kernel.org/netdev/CANn89iJVWfb=2i7oU1=D55rOyQnBbbikf+Mc6XHMkY7YX-yGEw@mail.gmail.com/


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 60fb35ca
Loading
Loading
Loading
Loading
+4 −16
Original line number Diff line number Diff line
@@ -256,21 +256,11 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
		skb_dst_set(skb, &tun_dst->dst);

	/* Ignore packet loops (and multicast echo) */
	if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr))
		goto rx_error;

	switch (skb_protocol(skb, true)) {
	case htons(ETH_P_IP):
		if (pskb_may_pull(skb, sizeof(struct iphdr)))
			goto rx_error;
		break;
	case htons(ETH_P_IPV6):
		if (pskb_may_pull(skb, sizeof(struct ipv6hdr)))
			goto rx_error;
		break;
	default:
		goto rx_error;
	if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
		geneve->dev->stats.rx_errors++;
		goto drop;
	}

	oiph = skb_network_header(skb);
	skb_reset_network_header(skb);

@@ -311,8 +301,6 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
		u64_stats_update_end(&stats->syncp);
	}
	return;
rx_error:
	geneve->dev->stats.rx_errors++;
drop:
	/* Consume bad packet */
	kfree_skb(skb);