--- /dev/null
+From stable-bounces@linux.kernel.org Wed Apr 5 17:47:36 2006
+Date: Wed, 5 Apr 2006 17:47:15 -0700
+From: Stephen Hemminger <shemminger@osdl.org>
+To: Jeff Garzik <jgarzik@pobox.com>
+Message-ID: <20060405174715.2ef75105@localhost.localdomain>
+Cc: netdev@vger.kernel.org, stable@kernel.org
+Subject: sky2: bad memory reference on dual port cards
+
+Sky2 driver will oops referencing bad memory if used on
+a dual port card. The problem is accessing past end of
+MIB counter space.
+
+Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/sky2.c | 4 ++--
+ drivers/net/sky2.h | 1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+--- linux-2.6.16.1.orig/drivers/net/sky2.c
++++ linux-2.6.16.1/drivers/net/sky2.c
+@@ -579,8 +579,8 @@ static void sky2_mac_init(struct sky2_hw
+ reg = gma_read16(hw, port, GM_PHY_ADDR);
+ gma_write16(hw, port, GM_PHY_ADDR, reg | GM_PAR_MIB_CLR);
+
+- for (i = 0; i < GM_MIB_CNT_SIZE; i++)
+- gma_read16(hw, port, GM_MIB_CNT_BASE + 8 * i);
++ for (i = GM_MIB_CNT_BASE; i <= GM_MIB_CNT_END; i += 4)
++ gma_read16(hw, port, i);
+ gma_write16(hw, port, GM_PHY_ADDR, reg);
+
+ /* transmit control */
+--- linux-2.6.16.1.orig/drivers/net/sky2.h
++++ linux-2.6.16.1/drivers/net/sky2.h
+@@ -1380,6 +1380,7 @@ enum {
+ /* MIB Counters */
+ #define GM_MIB_CNT_BASE 0x0100 /* Base Address of MIB Counters */
+ #define GM_MIB_CNT_SIZE 44 /* Number of MIB Counters */
++#define GM_MIB_CNT_END 0x025C /* Last MIB counter */
+
+ /*
+ * MIB Counters base address definitions (low word) -