Commit 3f090039995f for kernel

commit 3f090039995f609a8e236f37980dee5712dded61
Author: Tianyi Gao <tianyi@cloudflare.com>
Date:   Tue Oct 6 18:32:36 2026 +0100

    veth: fix peer NETDEV_XDP_ACT_NDO_XMIT after GRO is toggled while down

    A veth device advertises NETDEV_XDP_ACT_NDO_XMIT only if its peer has an
    XDP program attached or GRO enabled, that is, only if the peer will have
    NAPI to receive the frames.

    veth_set_features() updates the peer's flag when GRO is toggled, but
    returns early if the device is down, and veth_open() only refreshes the
    flags of the device being opened. Toggling GRO while the device is down
    therefore leaves the peer's flag stale after the device comes up.

    If GRO was enabled while down, the device comes up with NAPI but the
    peer does not advertise NDO_XMIT, and devmap rejects redirects to the
    peer with -EOPNOTSUPP. If GRO was disabled while down, the device comes
    up without NAPI but the peer still advertises NDO_XMIT, so redirects are
    accepted and then dropped in veth_xdp_xmit() with -ENXIO.

    Commit 7a6102aa6df0 ("veth: Update XDP feature set when bringing up
    device") made veth_open() refresh the device's own flags. Refresh the
    peer's flags there too. The peer's flag depends on this device's XDP
    program and GRO setting, not on whether the peer is up, so it is
    correct to set it even if the peer is down.

    Fixes: 8267fc71abb2 ("veth: take into account peer device for NETDEV_XDP_ACT_NDO_XMIT xdp_features flag")
    Signed-off-by: Tianyi Gao <tianyi@cloudflare.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
    Acked-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
    Link: https://patch.msgid.link/20261006173241.65945-2-tianyi@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 71227d0389aa..643b97dc5245 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -1415,6 +1415,7 @@ static int veth_open(struct net_device *dev)
 	}

 	veth_set_xdp_features(dev);
+	veth_set_xdp_features(peer);

 	return 0;
 }