@@ -4936,10 +4936,11 @@ u32 bpf_prog_run_generic_xdp(struct sk_buff *skb, struct xdp_buff *xdp,
49364936 return act ;
49374937}
49384938
4939- static u32 netif_receive_generic_xdp (struct sk_buff * skb ,
4939+ static u32 netif_receive_generic_xdp (struct sk_buff * * pskb ,
49404940 struct xdp_buff * xdp ,
49414941 struct bpf_prog * xdp_prog )
49424942{
4943+ struct sk_buff * skb = * pskb ;
49434944 u32 act = XDP_DROP ;
49444945
49454946 /* Reinjected packets coming from act_mirred or similar should
@@ -5020,32 +5021,32 @@ void generic_xdp_tx(struct sk_buff *skb, struct bpf_prog *xdp_prog)
50205021
50215022static DEFINE_STATIC_KEY_FALSE (generic_xdp_needed_key );
50225023
5023- int do_xdp_generic (struct bpf_prog * xdp_prog , struct sk_buff * skb )
5024+ int do_xdp_generic (struct bpf_prog * xdp_prog , struct sk_buff * * pskb )
50245025{
50255026 if (xdp_prog ) {
50265027 struct xdp_buff xdp ;
50275028 u32 act ;
50285029 int err ;
50295030
5030- act = netif_receive_generic_xdp (skb , & xdp , xdp_prog );
5031+ act = netif_receive_generic_xdp (pskb , & xdp , xdp_prog );
50315032 if (act != XDP_PASS ) {
50325033 switch (act ) {
50335034 case XDP_REDIRECT :
5034- err = xdp_do_generic_redirect (skb -> dev , skb ,
5035+ err = xdp_do_generic_redirect (( * pskb ) -> dev , * pskb ,
50355036 & xdp , xdp_prog );
50365037 if (err )
50375038 goto out_redir ;
50385039 break ;
50395040 case XDP_TX :
5040- generic_xdp_tx (skb , xdp_prog );
5041+ generic_xdp_tx (* pskb , xdp_prog );
50415042 break ;
50425043 }
50435044 return XDP_DROP ;
50445045 }
50455046 }
50465047 return XDP_PASS ;
50475048out_redir :
5048- kfree_skb_reason (skb , SKB_DROP_REASON_XDP );
5049+ kfree_skb_reason (* pskb , SKB_DROP_REASON_XDP );
50495050 return XDP_DROP ;
50505051}
50515052EXPORT_SYMBOL_GPL (do_xdp_generic );
@@ -5368,7 +5369,8 @@ static int __netif_receive_skb_core(struct sk_buff **pskb, bool pfmemalloc,
53685369 int ret2 ;
53695370
53705371 migrate_disable ();
5371- ret2 = do_xdp_generic (rcu_dereference (skb -> dev -> xdp_prog ), skb );
5372+ ret2 = do_xdp_generic (rcu_dereference (skb -> dev -> xdp_prog ),
5373+ & skb );
53725374 migrate_enable ();
53735375
53745376 if (ret2 != XDP_PASS ) {
0 commit comments