]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
[PATCH] sky2: bad memory reference on dual port cards
authorStephen Hemminger <shemminger@osdl.org>
Thu, 6 Apr 2006 00:47:15 +0000 (17:47 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 17 Apr 2006 20:16:04 +0000 (13:16 -0700)
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
drivers/net/sky2.h

index 73260364cba3f9c590dbc05775868d7ce62283c8..0618cd55aa3620eafaf47a082608b96bcb64de35 100644 (file)
@@ -579,8 +579,8 @@ static void sky2_mac_init(struct sky2_hw *hw, unsigned port)
        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 */
index dce955c76f3cc18f8006d28022af2a7168f626b0..c91e0a4a4be71f903ae6d5e9e7eb8602fe2e42c9 100644 (file)
@@ -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) -