--- a/sys/dev/netif/mxge/if_mxge.c +++ b/sys/dev/netif/mxge/if_mxge.c @@ -456,6 +456,12 @@ test = "read"; goto abort; } + /* repetitions<<16 | ticks: firmware data - never divide by 0 */ + if ((cmd.data0 & 0xffff) == 0) { + test = "read"; + status = EIO; + goto abort; + } sc->read_dma = ((cmd.data0>>16) * len * 2) / (cmd.data0 & 0xffff); cmd.data0 = MXGE_LOWPART_TO_U32(dmatest_bus); @@ -466,6 +472,11 @@ test = "write"; goto abort; } + if ((cmd.data0 & 0xffff) == 0) { + test = "write"; + status = EIO; + goto abort; + } sc->write_dma = ((cmd.data0>>16) * len * 2) / (cmd.data0 & 0xffff); cmd.data0 = MXGE_LOWPART_TO_U32(dmatest_bus); @@ -476,6 +487,11 @@ test = "read/write"; goto abort; } + if ((cmd.data0 & 0xffff) == 0) { + test = "read/write"; + status = EIO; + goto abort; + } sc->read_write_dma = ((cmd.data0>>16) * len * 2 * 2) / (cmd.data0 & 0xffff);