bpf: Let bpf_warn_invalid_xdp_action() report more info
authorPaolo Abeni <pabeni@redhat.com>
Tue, 30 Nov 2021 10:08:07 +0000 (11:08 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 13 Dec 2021 21:28:27 +0000 (22:28 +0100)
In non trivial scenarios, the action id alone is not sufficient to
identify the program causing the warning. Before the previous patch,
the generated stack-trace pointed out at least the involved device
driver.

Let's additionally include the program name and id, and the relevant
device name.

If the user needs additional infos, he can fetch them via a kernel
probe, leveraging the arguments added here.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://lore.kernel.org/bpf/ddb96bb975cbfddb1546cf5da60e77d5100b533c.1638189075.git.pabeni@redhat.com
37 files changed:
drivers/net/ethernet/amazon/ena/ena_netdev.c
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
drivers/net/ethernet/cavium/thunder/nicvf_main.c
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/freescale/enetc/enetc.c
drivers/net/ethernet/intel/i40e/i40e_txrx.c
drivers/net/ethernet/intel/i40e/i40e_xsk.c
drivers/net/ethernet/intel/ice/ice_txrx.c
drivers/net/ethernet/intel/ice/ice_xsk.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/marvell/mvneta.c
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
drivers/net/ethernet/mellanox/mlx4/en_rx.c
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
drivers/net/ethernet/microsoft/mana/mana_bpf.c
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/qlogic/qede/qede_fp.c
drivers/net/ethernet/sfc/rx.c
drivers/net/ethernet/socionext/netsec.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/ti/cpsw_priv.c
drivers/net/hyperv/netvsc_bpf.c
drivers/net/tun.c
drivers/net/veth.c
drivers/net/virtio_net.c
drivers/net/xen-netfront.c
include/linux/filter.h
kernel/bpf/cpumap.c
kernel/bpf/devmap.c
net/core/dev.c
net/core/filter.c

index 7d5d885d85d5ed9304798358221e11b11123c982..3b46f1df5609ccb428884550c3d8c24ac855611c 100644 (file)
@@ -434,7 +434,7 @@ static int ena_xdp_execute(struct ena_ring *rx_ring, struct xdp_buff *xdp)
                xdp_stat = &rx_ring->rx_stats.xdp_pass;
                break;
        default:
-               bpf_warn_invalid_xdp_action(verdict);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, verdict);
                xdp_stat = &rx_ring->rx_stats.xdp_invalid;
        }
 
index c8083df5e0ab848c8431c6bbd79f91de1b0f1f65..52fad0fdeacf31d3cd6fbb15e0106b9721e18eeb 100644 (file)
@@ -195,7 +195,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
                *event |= BNXT_REDIRECT_EVENT;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(bp->dev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(bp->dev, xdp_prog, act);
index bb45d5df2856fc22f4ab551fcdb8264c3c32f300..30450efccad79b78ddaac51c048046550d8a4b06 100644 (file)
@@ -590,7 +590,7 @@ static inline bool nicvf_xdp_rx(struct nicvf *nic, struct bpf_prog *prog,
                nicvf_xdp_sq_append_pkt(nic, sq, (u64)xdp.data, dma_addr, len);
                return true;
        default:
-               bpf_warn_invalid_xdp_action(action);
+               bpf_warn_invalid_xdp_action(nic->netdev, prog, action);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(nic->netdev, prog, action);
index d6871437d9515df18c7819817799f9ade8bcb57e..c78883c3a2c80ef7b9d2e36310909a9f55aab954 100644 (file)
@@ -2623,7 +2623,7 @@ static u32 dpaa_run_xdp(struct dpaa_priv *priv, struct qm_fd *fd, void *vaddr,
                }
                break;
        default:
-               bpf_warn_invalid_xdp_action(xdp_act);
+               bpf_warn_invalid_xdp_action(priv->net_dev, xdp_prog, xdp_act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act);
index 8e643567abce2a0673eb32eb3e55d3cc6c15b1bd..d21ba70ef4a3786684194c7f23536d56a0b9834f 100644 (file)
@@ -374,7 +374,7 @@ static u32 dpaa2_eth_run_xdp(struct dpaa2_eth_priv *priv,
                dpaa2_eth_xdp_enqueue(priv, ch, fd, vaddr, rx_fq->flowid);
                break;
        default:
-               bpf_warn_invalid_xdp_action(xdp_act);
+               bpf_warn_invalid_xdp_action(priv->net_dev, xdp_prog, xdp_act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act);
index 504e12554079e306e477b9619f272d6e96527377..eacb41f86bdb329dc25120566a5b26457676738f 100644 (file)
@@ -1547,7 +1547,7 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
 
                switch (xdp_act) {
                default:
-                       bpf_warn_invalid_xdp_action(xdp_act);
+                       bpf_warn_invalid_xdp_action(rx_ring->ndev, prog, xdp_act);
                        fallthrough;
                case XDP_ABORTED:
                        trace_xdp_exception(rx_ring->ndev, prog, xdp_act);
index 10a83e5385c70342cbe8c100309ae9db1a4adbfe..b399ca649f09e2b1f456bed39bd5f56b7f5ffafb 100644 (file)
@@ -2322,7 +2322,7 @@ static int i40e_run_xdp(struct i40e_ring *rx_ring, struct xdp_buff *xdp)
                result = I40E_XDP_REDIR;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index ea06e957393e62908325d0f235a54ab7f07672ee..945b1bb9c6f40baac925d162db8f66ff4f662169 100644 (file)
@@ -176,7 +176,7 @@ static int i40e_run_xdp_zc(struct i40e_ring *rx_ring, struct xdp_buff *xdp)
                        goto out_failure;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index bc3ba19dc88f8a79de13cb7b61e4f900eeec347a..56940bb908bc61d929bf01045d9076c9b643d619 100644 (file)
@@ -561,7 +561,7 @@ ice_run_xdp(struct ice_rx_ring *rx_ring, struct xdp_buff *xdp,
                        goto out_failure;
                return ICE_XDP_REDIR;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index bb9a8084729888ab764cf9b6834edf2085068b79..ef4b213881f3198ec2db8e5512240964cc74e6bb 100644 (file)
@@ -483,7 +483,7 @@ ice_run_xdp_zc(struct ice_rx_ring *rx_ring, struct xdp_buff *xdp,
                        goto out_failure;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index dd208930fbe4b7b1cfa75bcf810b095ace183536..337a7197e96f137e0e5e75ab8fdbab3b3b116076 100644 (file)
@@ -8422,7 +8422,7 @@ static struct sk_buff *igb_run_xdp(struct igb_adapter *adapter,
                result = IGB_XDP_REDIR;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(adapter->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index 142c57b7a4519f07e63e9411aa3dfe41d27683d6..7f2ce4b256d9bbeaea4454f6be1a37acdc80dd20 100644 (file)
@@ -2241,7 +2241,7 @@ static int __igc_xdp_run_prog(struct igc_adapter *adapter,
                return IGC_XDP_REDIRECT;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(adapter->netdev, prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index 0f9f022260d70f0653960690a19e89d6ac4bed8c..265bc52aacf8584a55b18433b2689dd02a4f5ddf 100644 (file)
@@ -2235,7 +2235,7 @@ static struct sk_buff *ixgbe_run_xdp(struct ixgbe_adapter *adapter,
                result = IXGBE_XDP_REDIR;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index db2bc58dfcfd0fff9dbf7550290dbaefa4cc6982..b3fd8e5cd85b4f3b47b643d1895eac049f20c1b8 100644 (file)
@@ -131,7 +131,7 @@ static int ixgbe_run_xdp_zc(struct ixgbe_adapter *adapter,
                        goto out_failure;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index b1dfbaff8b31e8f190966bbea615bd229cf93f70..2459ecf65125c3b9b1b0058f8b92ee77b00d0ac2 100644 (file)
@@ -1070,7 +1070,7 @@ static struct sk_buff *ixgbevf_run_xdp(struct ixgbevf_adapter *adapter,
                        goto out_failure;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rx_ring->netdev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
 out_failure:
index ce810fc3c1a2b2579e95e687607f714fc4dc8147..23cc4b874285b707406665ae7c2a13aa5da9e7cf 100644 (file)
@@ -2239,7 +2239,7 @@ mvneta_run_xdp(struct mvneta_port *pp, struct mvneta_rx_queue *rxq,
                        mvneta_xdp_put_buff(pp, rxq, xdp, sinfo, sync);
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(pp->dev, prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(pp->dev, prog, act);
index 8e5820d12362702b2f5dbdaafebf5845dc356cd8..7273a4c9dbb1fd3c1cfab30e1af63d18f5b1d10e 100644 (file)
@@ -3823,7 +3823,7 @@ mvpp2_run_xdp(struct mvpp2_port *port, struct bpf_prog *prog,
                }
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(port->dev, prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(port->dev, prog, act);
index 0cc6353254bf07d2093edd349002b240d1a28a40..7c4068c5d1ac251d9e32abd905c236c650330dde 100644 (file)
@@ -1198,7 +1198,7 @@ static bool otx2_xdp_rcv_pkt_handler(struct otx2_nic *pfvf,
                put_page(page);
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(pfvf->netdev, prog, act);
                break;
        case XDP_ABORTED:
                trace_xdp_exception(pfvf->netdev, prog, act);
index 650e6a1844aea0bfbe0f852bd5a393475081dfeb..8cfc649f226bf24a284f4883976842c0e16b7b1b 100644 (file)
@@ -812,7 +812,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
                                trace_xdp_exception(dev, xdp_prog, act);
                                goto xdp_drop_no_cnt; /* Drop on xmit failure */
                        default:
-                               bpf_warn_invalid_xdp_action(act);
+                               bpf_warn_invalid_xdp_action(dev, xdp_prog, act);
                                fallthrough;
                        case XDP_ABORTED:
                                trace_xdp_exception(dev, xdp_prog, act);
index 2f0df5cc1a2d97676a8318c21308141146b1c6c5..338d65e2c9ce8d88f39842c01b26d0760452c31e 100644 (file)
@@ -151,7 +151,7 @@ bool mlx5e_xdp_handle(struct mlx5e_rq *rq, struct mlx5e_dma_info *di,
                rq->stats->xdp_redirect++;
                return true;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rq->netdev, prog, act);
                fallthrough;
        case XDP_ABORTED:
 xdp_abort:
index 1bc8ff388341880b6fff4adcc3076422275560be..1d2f948b5c00d1a5b246700f60e5c86753478f29 100644 (file)
@@ -60,7 +60,7 @@ u32 mana_run_xdp(struct net_device *ndev, struct mana_rxq *rxq,
                break;
 
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(ndev, prog, act);
        }
 
 out:
index 6e38da4ad554c31e401ef23dd83f4bdb60bf7068..79257ec41987c1896b40bc63d550a0ee56fd2bd2 100644 (file)
@@ -1944,7 +1944,7 @@ static int nfp_net_rx(struct nfp_net_rx_ring *rx_ring, int budget)
                                                            xdp_prog, act);
                                continue;
                        default:
-                               bpf_warn_invalid_xdp_action(act);
+                               bpf_warn_invalid_xdp_action(dp->netdev, xdp_prog, act);
                                fallthrough;
                        case XDP_ABORTED:
                                trace_xdp_exception(dp->netdev, xdp_prog, act);
index 5ea9cb4311a1c8d303cef7f46eb5f467da32264e..b242000a77fd8db322672e541df074be9b5ce9ef 100644 (file)
@@ -1153,7 +1153,7 @@ static bool qede_rx_xdp(struct qede_dev *edev,
                qede_rx_bd_ring_consume(rxq);
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(edev->ndev, prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(edev->ndev, prog, act);
index 606750938b89006c087d6fdd8badfd941c2aeaf8..2375cef577e44e2db689a24bb50f9d37cdcce33a 100644 (file)
@@ -338,7 +338,7 @@ static bool efx_do_xdp(struct efx_nic *efx, struct efx_channel *channel,
                break;
 
        default:
-               bpf_warn_invalid_xdp_action(xdp_act);
+               bpf_warn_invalid_xdp_action(efx->net_dev, xdp_prog, xdp_act);
                efx_free_rx_buffers(rx_queue, rx_buf, 1);
                channel->n_rx_xdp_bad_drops++;
                trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act);
index de7d8bf2c226fa1e457dd96c2027a45b6c8ab4e4..25dcd8eda5fc9fe5fe7fb11ea7c4b1b463611b00 100644 (file)
@@ -933,7 +933,7 @@ static u32 netsec_run_xdp(struct netsec_priv *priv, struct bpf_prog *prog,
                }
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(priv->ndev, prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(priv->ndev, prog, act);
index 4e05c1d92935d5c0eef54c6f8008327665d570b0..7f62ddc900884aa2e12a91a3e88da4ed9af776bf 100644 (file)
@@ -4714,7 +4714,7 @@ static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,
                        res = STMMAC_XDP_REDIRECT;
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(priv->dev, prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(priv->dev, prog, act);
index c99dd9735087ded91833c15b6bb04231dd3cef47..67c4009fd16c37712bbcff457e39157262ace915 100644 (file)
@@ -1366,7 +1366,7 @@ int cpsw_run_xdp(struct cpsw_priv *priv, int ch, struct xdp_buff *xdp,
                xdp_do_flush_map();
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(ndev, prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(ndev, prog, act);
index aa877da113f8e2804ddd89dc0f740caf275e4989..7856905414eb8a4c3f89e13328f6d1b5a4cc78fd 100644 (file)
@@ -68,7 +68,7 @@ u32 netvsc_run_xdp(struct net_device *ndev, struct netvsc_channel *nvchan,
                break;
 
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(ndev, prog, act);
        }
 
 out:
index 1572878c340319953fc07ab2721dc9a994ed1b88..0e5d2272f63a0aa7f8407c8c71fcf77d037a7001 100644 (file)
@@ -1551,7 +1551,7 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog,
        case XDP_PASS:
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(tun->dev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(tun->dev, xdp_prog, act);
index 38f6da24f4606701874737ac153f9b2e33b638eb..700cc9374f9c363114a8df3da6bdadc30bb2c59f 100644 (file)
@@ -644,7 +644,7 @@ static struct xdp_frame *veth_xdp_rcv_one(struct veth_rq *rq,
                        rcu_read_unlock();
                        goto xdp_xmit;
                default:
-                       bpf_warn_invalid_xdp_action(act);
+                       bpf_warn_invalid_xdp_action(rq->dev, xdp_prog, act);
                        fallthrough;
                case XDP_ABORTED:
                        trace_xdp_exception(rq->dev, xdp_prog, act);
@@ -794,7 +794,7 @@ static struct sk_buff *veth_xdp_rcv_skb(struct veth_rq *rq,
                rcu_read_unlock();
                goto xdp_xmit;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(rq->dev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(rq->dev, xdp_prog, act);
index 088d9404c93d03ab38032848862b64ee870212b9..d3e0b3a533cdc5ea06627b885deb556874866c36 100644 (file)
@@ -812,7 +812,7 @@ static struct sk_buff *receive_small(struct net_device *dev,
                        rcu_read_unlock();
                        goto xdp_xmit;
                default:
-                       bpf_warn_invalid_xdp_action(act);
+                       bpf_warn_invalid_xdp_action(vi->dev, xdp_prog, act);
                        fallthrough;
                case XDP_ABORTED:
                        trace_xdp_exception(vi->dev, xdp_prog, act);
@@ -1025,7 +1025,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
                        rcu_read_unlock();
                        goto xdp_xmit;
                default:
-                       bpf_warn_invalid_xdp_action(act);
+                       bpf_warn_invalid_xdp_action(vi->dev, xdp_prog, act);
                        fallthrough;
                case XDP_ABORTED:
                        trace_xdp_exception(vi->dev, xdp_prog, act);
index 911f43986a8c9fdad0afa0d384f4629d32972c53..7b7eb617051a2b1c12d289cbbc66249099afe6ed 100644 (file)
@@ -930,7 +930,7 @@ static u32 xennet_run_xdp(struct netfront_queue *queue, struct page *pdata,
                break;
 
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(queue->info->netdev, prog, act);
        }
 
        return act;
index 68c6b5c208e7fdafcf4879e24e604e2ae9977190..60eec80fa1d460cb8bc5a6cd765e0d47892973e1 100644 (file)
@@ -1027,7 +1027,7 @@ void xdp_do_flush(void);
  */
 #define xdp_do_flush_map xdp_do_flush
 
-void bpf_warn_invalid_xdp_action(u32 act);
+void bpf_warn_invalid_xdp_action(struct net_device *dev, struct bpf_prog *prog, u32 act);
 
 #ifdef CONFIG_INET
 struct sock *bpf_run_sk_reuseport(struct sock_reuseport *reuse, struct sock *sk,
index 585b2b77ccc4f1a7d106d40b1f3cc9657b925fb5..0421061d95f177a90fa303dc4212be2ec559e736 100644 (file)
@@ -195,7 +195,7 @@ static void cpu_map_bpf_prog_run_skb(struct bpf_cpu_map_entry *rcpu,
                        }
                        return;
                default:
-                       bpf_warn_invalid_xdp_action(act);
+                       bpf_warn_invalid_xdp_action(NULL, rcpu->prog, act);
                        fallthrough;
                case XDP_ABORTED:
                        trace_xdp_exception(skb->dev, rcpu->prog, act);
@@ -254,7 +254,7 @@ static int cpu_map_bpf_prog_run_xdp(struct bpf_cpu_map_entry *rcpu,
                        }
                        break;
                default:
-                       bpf_warn_invalid_xdp_action(act);
+                       bpf_warn_invalid_xdp_action(NULL, rcpu->prog, act);
                        fallthrough;
                case XDP_DROP:
                        xdp_return_frame(xdpf);
index f02d04540c0c0d87c114c54b05585e9c8c5f9a8b..6feea293ff103df70ed7e0a4b76d9b8e46af4077 100644 (file)
@@ -348,7 +348,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
                                frames[nframes++] = xdpf;
                        break;
                default:
-                       bpf_warn_invalid_xdp_action(act);
+                       bpf_warn_invalid_xdp_action(NULL, xdp_prog, act);
                        fallthrough;
                case XDP_ABORTED:
                        trace_xdp_exception(dev, xdp_prog, act);
@@ -507,7 +507,7 @@ static u32 dev_map_bpf_prog_run_skb(struct sk_buff *skb, struct bpf_dtab_netdev
                __skb_push(skb, skb->mac_len);
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(NULL, dst->xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(dst->dev, dst->xdp_prog, act);
index 4420086f3aeb34614fc8222206dff2b2caa31d02..c431c8925eedf31c9d61cebbe149c8c9cd59e890 100644 (file)
@@ -4708,7 +4708,7 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb,
        case XDP_PASS:
                break;
        default:
-               bpf_warn_invalid_xdp_action(act);
+               bpf_warn_invalid_xdp_action(skb->dev, xdp_prog, act);
                fallthrough;
        case XDP_ABORTED:
                trace_xdp_exception(skb->dev, xdp_prog, act);
index ad8619aa77b7d6ef0ebdb8438379188ec9981b3d..3f656391af7e9159b68f8b9313718051083052dd 100644 (file)
@@ -8180,13 +8180,13 @@ static bool xdp_is_valid_access(int off, int size,
        return __is_valid_xdp_access(off, size);
 }
 
-void bpf_warn_invalid_xdp_action(u32 act)
+void bpf_warn_invalid_xdp_action(struct net_device *dev, struct bpf_prog *prog, u32 act)
 {
        const u32 act_max = XDP_REDIRECT;
 
-       pr_warn_once("%s XDP return value %u, expect packet loss!\n",
+       pr_warn_once("%s XDP return value %u on prog %s (id %d) dev %s, expect packet loss!\n",
                     act > act_max ? "Illegal" : "Driver unsupported",
-                    act);
+                    act, prog->aux->name, prog->aux->id, dev ? dev->name : "N/A");
 }
 EXPORT_SYMBOL_GPL(bpf_warn_invalid_xdp_action);