This is a note to let you know that I've just added the patch titled tg3: avoid double-freeing of rx data memory to the 3.12-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: tg3-avoid-double-freeing-of-rx-data-memory.patch and it can be found in the queue-3.12 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 85aec73d595b8847f9c4ea571deb127913f0d508 Mon Sep 17 00:00:00 2001 From: Ivan Vecera <ivecera@xxxxxxxxxx> Date: Wed, 6 Nov 2013 14:02:36 +0100 Subject: tg3: avoid double-freeing of rx data memory From: Ivan Vecera <ivecera@xxxxxxxxxx> commit 85aec73d595b8847f9c4ea571deb127913f0d508 upstream. If build_skb fails the memory associated with the ring buffer is freed but the ri->data member is not zeroed in this case. This causes a double-free of this memory in tg3_free_rings->... path. The patch moves this block after setting ri->data to NULL. It would be nice to fix this bug also in stable >= v3.4 trees. Cc: Nithin Nayak Sujir <nsujir@xxxxxxxxxxxx> Cc: Michael Chan <mchan@xxxxxxxxxxxx> Signed-off-by: Ivan Vecera <ivecera@xxxxxxxxxx> Acked-by: Michael Chan <mchan@xxxxxxxxxxxx> Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/net/ethernet/broadcom/tg3.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c @@ -6848,12 +6848,6 @@ static int tg3_rx(struct tg3_napi *tnapi pci_unmap_single(tp->pdev, dma_addr, skb_size, PCI_DMA_FROMDEVICE); - skb = build_skb(data, frag_size); - if (!skb) { - tg3_frag_free(frag_size != 0, data); - goto drop_it_no_recycle; - } - skb_reserve(skb, TG3_RX_OFFSET(tp)); /* Ensure that the update to the data happens * after the usage of the old DMA mapping. */ @@ -6861,6 +6855,12 @@ static int tg3_rx(struct tg3_napi *tnapi ri->data = NULL; + skb = build_skb(data, frag_size); + if (!skb) { + tg3_frag_free(frag_size != 0, data); + goto drop_it_no_recycle; + } + skb_reserve(skb, TG3_RX_OFFSET(tp)); } else { tg3_recycle_rx(tnapi, tpr, opaque_key, desc_idx, *post_ptr); Patches currently in stable-queue which might be from ivecera@xxxxxxxxxx are queue-3.12/tg3-avoid-double-freeing-of-rx-data-memory.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html