XDP fixes for socionext driver
Subsystems (3)
cover XDP fixes for socionext driver
Fix possible user-after-in XDP rx path
Fix rx statistics accounting if no bpf program is attached
Lorenzo Bianconi (2):
net: socionext: fix possible user-after-free in netsec_process_rx
net: socionext: fix xdp_result initialization in netsec_process_rx
drivers/net/ethernet/socionext/netsec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Signature · 1 line
2.21.1
PATCH 1/2 net: socionext: fix possible user-after-free in netsec_process_rx
Fix possible use-after-free in in netsec_process_rx that can occurs if the first packet is sent to the normal networking stack and the following one is dropped by the bpf program attached to the xdp hook. Fix the issue defining the skb pointer in the 'budget' loop
--- drivers/net/ethernet/socionext/netsec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/socionext/netsec.c +1 -1
@@ -929,7 +929,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_rx_pkt_info rx_info;enum dma_data_direction dma_dir;struct bpf_prog *xdp_prog; -struct sk_buff *skb =NULL ;u16 xdp_xmit =0 ;u32 xdp_act =0 ;int done =0 ;
@@ -943,6 +942,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); +struct sk_buff *skb =NULL ;u32 xdp_result =XDP_PASS ;u16 pkt_len, desc_len;dma_addr_t dma_handle;
Signature · 1 line
2.21.1
Re: [PATCH net 1/2] net: socionext: fix possible user-after-free in netsec_process_rx
Quoted 8 lines · On Sat, 25 Jan 2020 12:48:50 +0100 Lorenzo Bianconi <[email protected]> wrote:
Fix possible use-after-free in in
netsec_process_rxthat can occurs if the first packet is sent to the normal networking stack and the following one is dropped by the bpf program attached to the xdp hook. Fix the issue defining the skb pointer in the 'budget' loopFixes ba2b232108d3c ("net: netsec: add XDP support")Signed-off-by Lorenzo Bianconi <[email protected]>---
Quoted 16 lines
drivers/net/ethernet/socionext/netsec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/net/ethernet/socionext/netsec.c +0
-1@@ -929,7 +929,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_rx_pkt_info rx_info;enum dma_data_direction dma_dir;struct bpf_prog *xdp_prog; -struct sk_buff *skb =NULL ;u16 xdp_xmit =0 ;u32 xdp_act =0 ;int done =0 ;
drivers/net/ethernet/socionext/netsec.c static int netsec_process_rx(struct netsec_priv *priv, int budget) · line 948
Quoted 7 lines
drivers/net/ethernet/socionext/netsec.c +1
-0@@ -943,6 +942,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); +struct sk_buff *skb =NULL ;u32 xdp_result =XDP_PASS ;u16 pkt_len, desc_len;dma_addr_t dma_handle;
Yes, this is needed in case an xdp_prog jumps to label 'next:', skipping the skb = build_skb() assignment.
Signature · 4 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer
Re: [PATCH net 1/2] net: socionext: fix possible user-after-free in netsec_process_rx
In reply to Lorenzo BianconiQuoted 34 lines · Lorenzo Bianconi
Fix possible use-after-free in in
netsec_process_rxthat can occurs if the first packet is sent to the normal networking stack and the following one is dropped by the bpf program attached to the xdp hook. Fix the issue defining the skb pointer in the 'budget' loopFixes ba2b232108d3c ("net: netsec: add XDP support")Signed-off-by Lorenzo Bianconi <[email protected]>--- drivers/net/ethernet/socionext/netsec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/net/ethernet/socionext/netsec.c +1
-1@@ -929,7 +929,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_rx_pkt_info rx_info;enum dma_data_direction dma_dir;struct bpf_prog *xdp_prog; -struct sk_buff *skb =NULL ;u16 xdp_xmit =0 ;u32 xdp_act =0 ;int done =0 ;@@ -943,6 +942,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); +struct sk_buff *skb =NULL ;u32 xdp_result =XDP_PASS ;u16 pkt_len, desc_len;dma_addr_t dma_handle;Signature · 1 line
2.21.1
PATCH 2/2 net: socionext: fix xdp_result initialization in netsec_process_rx
In reply to Lorenzo BianconiFix xdp_result initialization in netsec_process_rx in order to not increase rx counters if there is no bpf program attached to the xdp hook and napi_gro_receive returns GRO_DROP
--- drivers/net/ethernet/socionext/netsec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/socionext/netsec.c +1 -1
@@ -942,8 +942,8 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); +u32 xdp_result =NETSEC_XDP_PASS ;struct sk_buff *skb =NULL ; -u32 xdp_result =XDP_PASS ;u16 pkt_len, desc_len;dma_addr_t dma_handle;struct xdp_buff xdp;
Signature · 1 line
2.21.1
Re: [PATCH net 2/2] net: socionext: fix xdp_result initialization in netsec_process_rx
Quoted 7 lines · On Sat, 25 Jan 2020 12:48:51 +0100 Lorenzo Bianconi <[email protected]> wrote:
Fix
xdp_resultinitialization innetsec_process_rxin order to not increase rx counters if there is no bpf program attached to the xdp hook andnapi_gro_receivereturnsGRO_DROPFixes ba2b232108d3c ("net: netsec: add XDP support")Signed-off-by Lorenzo Bianconi <[email protected]>---
drivers/net/ethernet/socionext/netsec.c static int netsec_process_rx(struct netsec_priv *priv, int budget) · line 945
Quoted 12 lines
drivers/net/ethernet/socionext/netsec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/net/ethernet/socionext/netsec.c +1
-0@@ -942,8 +942,8 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); +u32 xdp_result =NETSEC_XDP_PASS ;
As a help to reviewers value is:
#define NETSEC_XDP_PASS 0
drivers/net/ethernet/socionext/netsec.c static int netsec_process_rx(struct netsec_priv *priv, int budget) · line 946
Quoted 2 lines
drivers/net/ethernet/socionext/netsec.c +0
-1struct sk_buff *skb =NULL ; -u32 xdp_result =XDP_PASS ;
XDP_PASS == 2
Quoted 3 lines
drivers/net/ethernet/socionext/netsec.c +0
-0u16 pkt_len, desc_len;dma_addr_t dma_handle;struct xdp_buff xdp;
Signature · 4 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer
Re: [PATCH net 2/2] net: socionext: fix xdp_result initialization in netsec_process_rx
In reply to Lorenzo BianconiQuoted 27 lines · Lorenzo Bianconi
Fix
xdp_resultinitialization innetsec_process_rxin order to not increase rx counters if there is no bpf program attached to the xdp hook andnapi_gro_receivereturnsGRO_DROPFixes ba2b232108d3c ("net: netsec: add XDP support")Signed-off-by Lorenzo Bianconi <[email protected]>--- drivers/net/ethernet/socionext/netsec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/net/ethernet/socionext/netsec.c +1
-1@@ -942,8 +942,8 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); +u32 xdp_result =NETSEC_XDP_PASS ;struct sk_buff *skb =NULL ; -u32 xdp_result =XDP_PASS ;u16 pkt_len, desc_len;dma_addr_t dma_handle;struct xdp_buff xdp;Signature · 1 line
2.21.1
David Miller
maintainerFrom: Lorenzo Bianconi <[email protected]>
Date: Sat, 25 Jan 2020 12:48:49 +0100
Quoted 2 lines
Fix possible user-after-in XDP rx path
Fix rx statistics accounting if no bpf program is attached
Series applied and queued up for -stable, thank you.