diff options
author | Prasad J Pandit | 2017-02-02 11:46:24 +0100 |
---|---|---|
committer | Jason Wang | 2017-02-15 04:18:57 +0100 |
commit | 81f17e0d435c3db3a3e67e0d32ebf9c98973211f (patch) | |
tree | f4433c22c4eaf80f765f1c0cbb2336b3ed809f68 /hw | |
parent | colo-compare: sort TCP packet queue by sequence number (diff) | |
download | qemu-81f17e0d435c3db3a3e67e0d32ebf9c98973211f.tar.gz qemu-81f17e0d435c3db3a3e67e0d32ebf9c98973211f.tar.xz qemu-81f17e0d435c3db3a3e67e0d32ebf9c98973211f.zip |
net: imx: limit buffer descriptor count
i.MX Fast Ethernet Controller uses buffer descriptors to manage
data flow to/fro receive & transmit queues. While transmitting
packets, it could continue to read buffer descriptors if a buffer
descriptor has length of zero and has crafted values in bd.flags.
Set an upper limit to number of buffer descriptors.
Reported-by: Li Qiang <liqiang6-s@360.cn>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/net/imx_fec.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/hw/net/imx_fec.c b/hw/net/imx_fec.c index 50c75642c6..90e6ee35ba 100644 --- a/hw/net/imx_fec.c +++ b/hw/net/imx_fec.c @@ -55,6 +55,8 @@ } \ } while (0) +#define IMX_MAX_DESC 1024 + static const char *imx_default_reg_name(IMXFECState *s, uint32_t index) { static char tmp[20]; @@ -402,12 +404,12 @@ static void imx_eth_update(IMXFECState *s) static void imx_fec_do_tx(IMXFECState *s) { - int frame_size = 0; + int frame_size = 0, descnt = 0; uint8_t frame[ENET_MAX_FRAME_SIZE]; uint8_t *ptr = frame; uint32_t addr = s->tx_descriptor; - while (1) { + while (descnt++ < IMX_MAX_DESC) { IMXFECBufDesc bd; int len; @@ -453,12 +455,12 @@ static void imx_fec_do_tx(IMXFECState *s) static void imx_enet_do_tx(IMXFECState *s) { - int frame_size = 0; + int frame_size = 0, descnt = 0; uint8_t frame[ENET_MAX_FRAME_SIZE]; uint8_t *ptr = frame; uint32_t addr = s->tx_descriptor; - while (1) { + while (descnt++ < IMX_MAX_DESC) { IMXENETBufDesc bd; int len; |