Commit b5e82e3c authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by David S. Miller

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

Fixes: ba2b2321 ("net: netsec: add XDP support")
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Acked-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Acked-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 09917a12
...@@ -935,7 +935,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget) ...@@ -935,7 +935,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
struct netsec_rx_pkt_info rx_info; struct netsec_rx_pkt_info rx_info;
enum dma_data_direction dma_dir; enum dma_data_direction dma_dir;
struct bpf_prog *xdp_prog; struct bpf_prog *xdp_prog;
struct sk_buff *skb = NULL;
u16 xdp_xmit = 0; u16 xdp_xmit = 0;
u32 xdp_act = 0; u32 xdp_act = 0;
int done = 0; int done = 0;
...@@ -949,6 +948,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget) ...@@ -949,6 +948,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
struct netsec_de *de = dring->vaddr + (DESC_SZ * idx); struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);
struct netsec_desc *desc = &dring->desc[idx]; struct netsec_desc *desc = &dring->desc[idx];
struct page *page = virt_to_page(desc->addr); struct page *page = virt_to_page(desc->addr);
struct sk_buff *skb = NULL;
u32 xdp_result = XDP_PASS; u32 xdp_result = XDP_PASS;
u16 pkt_len, desc_len; u16 pkt_len, desc_len;
dma_addr_t dma_handle; dma_addr_t dma_handle;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment