aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2011-09-20 11:13:03 -0400
committerHerton Ronaldo Krzesinski <herton.krzesinski@canonical.com>2011-10-17 13:32:57 -0400
commit2936022c49d1138eeecd12b7cfba860bbfd83baf (patch)
tree71da404756a72cecbe015fdae293804a8e4f97cf
parent5f5c8531f9bc88ca9b8b852563128a59f8b73c42 (diff)
ixgbe: fix possible null buffer error
BugLink: http://bugs.launchpad.net/bugs/868628 commit b811ce9104a7f7663ddae4f7795a194a103b8f90 upstream. It seems that at least one PPC machine would occasionally give a (valid) 0 as the return value from dma_map, this caused the ixgbe code to not work correctly. A fix is pending in the PPC tree to not return 0 from dma map, but we can also fix the driver to make sure we don't mess up in other arches as well. This patch is applicable to all current stable kernels. Ref: https://bugzilla.redhat.com/show_bug.cgi?id=683611 Reported-by: Neil Horman <nhorman@redhat.com> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> CC: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 08e8e25c159..83f197d03d4 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1366,8 +1366,8 @@ static void ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
1366 if (ring_is_rsc_enabled(rx_ring)) 1366 if (ring_is_rsc_enabled(rx_ring))
1367 pkt_is_rsc = ixgbe_get_rsc_state(rx_desc); 1367 pkt_is_rsc = ixgbe_get_rsc_state(rx_desc);
1368 1368
1369 /* if this is a skb from previous receive DMA will be 0 */ 1369 /* linear means we are building an skb from multiple pages */
1370 if (rx_buffer_info->dma) { 1370 if (!skb_is_nonlinear(skb)) {
1371 u16 hlen; 1371 u16 hlen;
1372 if (pkt_is_rsc && 1372 if (pkt_is_rsc &&
1373 !(staterr & IXGBE_RXD_STAT_EOP) && 1373 !(staterr & IXGBE_RXD_STAT_EOP) &&