提交 8a9a0ea6 编写于 作者: D Davide Ciminaghi 提交者: David S. Miller

net/ethernet: ks8851_mll fix rx frame buffer overflow

At the beginning of ks_rcv(), a for loop retrieves the
header information relevant to all the frames stored
in the mac's internal buffers. The number of pending
frames is stored as an 8 bits field in KS_RXFCTR.
If interrupts are disabled long enough to allow for more than
32 frames to accumulate in the MAC's internal buffers, a buffer
overflow occurs.
This patch fixes the problem by making the
driver's frame_head_info buffer big enough.
Well actually, since the chip appears to have 12K of
internal rx buffers and the shortest ethernet frame should
be 64 bytes long, maybe the limit could be set to
12*1024/64 = 192 frames, but 255 should be safer.
Signed-off-by: NDavide Ciminaghi <ciminaghi@gnudd.com>
Signed-off-by: NRaffaele Recalcati <raffaele.recalcati@bticino.it>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 c509e754
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#define DRV_NAME "ks8851_mll" #define DRV_NAME "ks8851_mll"
static u8 KS_DEFAULT_MAC_ADDRESS[] = { 0x00, 0x10, 0xA1, 0x86, 0x95, 0x11 }; static u8 KS_DEFAULT_MAC_ADDRESS[] = { 0x00, 0x10, 0xA1, 0x86, 0x95, 0x11 };
#define MAX_RECV_FRAMES 32 #define MAX_RECV_FRAMES 255
#define MAX_BUF_SIZE 2048 #define MAX_BUF_SIZE 2048
#define TX_BUF_SIZE 2000 #define TX_BUF_SIZE 2000
#define RX_BUF_SIZE 2000 #define RX_BUF_SIZE 2000
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册