Hi,

For a few hours I went grepping for MOD FPE conditions in the source code.
I did this systematically examining them and here is my recommendations in
form of patches for these spots.  It's half the effort but I'm really wasted
right now, and can't go on.  Perhaps another time I'll continue.

grep Logfile with comments below my signature.  It is 20 patches, goes to
ENDHERE

Best Regards,
-peter

-- 
Over thirty years experience on Unix-like Operating Systems starting with QNX.


from:  56      grep -r "%\ [0a-z]" * > /tmp/divide.txt

STARTHERE:

arch/alpha/stand/installboot.c: if ((minor(disksb.st_rdev) % 
getmaxpartitions()) != getrawpartition())

getmaxpartitions can return 0, but since it is an installboot, it's unlikely.

arch/alpha/tc/ioasic.c:                     (led_blink_state.patpos + 1) % 
sizeof(led_pattern8);

*safe

arch/amd64/amd64/acpi_wakecode.S:       .word   0x0fff, (ACPI_TRAMPOLINE % 
0x10000)

*safe

arch/amd64/amd64/identcpu.c:            ci->ci_smt_id = thread_id % nthreads;

*safe (nthreads is > 1)

arch/amd64/stand/efi32/efidev.c:        i_lblks = ((off % blks) == 0)? 0 : blks 
- (off % blks);

*safe         if (blks == 0)

arch/amd64/stand/efi32/efidev.c:        i_tblks = (nsect > i_lblks)? (off + 
nsect) % blks : 0;


arch/amd64/stand/efi64/efidev.c:        i_lblks = ((off % blks) == 0)? 0 : blks 
- (off % blks);
arch/amd64/stand/efi64/efidev.c:        i_tblks = (nsect > i_lblks)? (off + 
nsect) % blks : 0;
arch/amd64/stand/efiboot/efidev.c:              if (off % blks != 0 || nsect % 
blks != 0) {

*safe  blks == 0 check


arch/arm/mainbus/mainbus.c:     if (sc->sc_rangeslen > 0 && !(sc->sc_rangeslen 
% sizeof(uint32_t))) {

*safe

arch/arm/mainbus/mainbus.c:     if (len > 0 && (len % line) == 0) {

--- mainbus.c   Sat Mar 12 15:40:41 2022
+++ /tmp/tfile  Sat Jul 29 12:02:00 2023
@@ -171,7 +171,7 @@
 
        len = OF_getproplen(node, "reg");
        line = (sc->sc_acells + sc->sc_scells) * sizeof(uint32_t);
-       if (len > 0 && (len % line) == 0) {
+       if (len > 0 && line > 0 && (len % line) == 0) {
                reg = malloc(len, M_TEMP, M_WAITOK);
                OF_getpropintarray(node, "reg", reg, len);
 



arch/arm/mainbus/mainbus.c:     if (len > 0 && (len % sizeof(uint32_t)) == 0) {

*safe




arch/arm/simplebus/simplebus.c:     (sc->sc_rangeslen % sizeof(uint32_t)) == 0) 
{
arch/arm/simplebus/simplebus.c:     (sc->sc_dmarangeslen % sizeof(uint32_t)) == 
0) {

*safe 

arch/arm/simplebus/simplebus.c: if (len > 0 && line > 0 && (len % line) == 0) {
arch/arm/simplebus/simplebus.c: if (len > 0 && (len % sizeof(uint32_t)) == 0) {

*safe

arch/arm64/arm64/intr.c:        if (len <= 0 || (len % sizeof(uint32_t) != 0))

*safe

arch/arm64/dev/aplpcie.c:           (sc->sc_msi_rangelen % sizeof(uint32_t)) ||
arch/arm64/dev/aplpcie.c:       if (rangeslen <= 0 || (rangeslen % 
sizeof(uint32_t)) ||

*safe

arch/arm64/dev/mainbus.c:       if (sc->sc_rangeslen > 0 && !(sc->sc_rangeslen 
% sizeof(uint32_t))) {

*safe


arch/arm64/dev/mainbus.c:       if (len > 0 && (len % line) == 0) {

--- mainbus.c   Tue Apr 11 06:29:15 2023
+++ /tmp/tfile  Sat Jul 29 12:07:20 2023
@@ -228,7 +228,7 @@
 
        len = OF_getproplen(node, "reg");
        line = (sc->sc_acells + sc->sc_scells) * sizeof(uint32_t);
-       if (len > 0 && (len % line) == 0) {
+       if (len > 0 && line > 0 && (len % line) == 0) {
                reg = malloc(len, M_TEMP, M_WAITOK);
                OF_getpropintarray(node, "reg", reg, len);
 

arch/arm64/dev/mainbus.c:       if (len > 0 && (len % sizeof(uint32_t)) == 0) {

*safe

arch/arm64/dev/simplebus.c:         (sc->sc_rangeslen % sizeof(uint32_t)) == 0) 
{
arch/arm64/dev/simplebus.c:         (sc->sc_dmarangeslen % sizeof(uint32_t)) == 
0) {


*safe

arch/arm64/dev/simplebus.c:     if (len > 0 && line > 0 && (len % line) == 0) {
arch/arm64/dev/simplebus.c:     if (len > 0 && (len % sizeof(uint32_t)) == 0) {

*safe

arch/arm64/stand/efiboot/efiboot.c:                     buf[i] ^= random[i % 
len];
arch/arm64/stand/efiboot/efiboot.c:                     buf[i] ^= random[i % 
len];


*safe

arch/arm64/stand/efiboot/efidev.c:              if (off % blks != 0 || nsect % 
blks != 0) {

*safe

arch/arm64/stand/efiboot/fdt.c:                 if ((cnt % sizeof(uint32_t)) == 
0)

*safe

arch/armv7/armv7/intr.c:        if (len <= 0 || (len % sizeof(uint32_t) != 0))

*safe

arch/armv7/marvell/mvmbus.c:    if (rangeslen <= 0 || (rangeslen % 
sizeof(uint32_t)))
arch/armv7/marvell/mvpcie.c:    if (rangeslen <= 0 || (rangeslen % 
sizeof(uint32_t)) ||

*safe

arch/armv7/omap/ommmc.c:                if (cmd->c_datalen % blksize > 0) {


--- ommmc.c     Sun Oct 24 19:52:27 2021
+++ /tmp/tfile  Sat Jul 29 12:19:48 2023
@@ -936,7 +936,7 @@
         */
 
        /* Fragment the data into proper blocks. */
-       if (cmd->c_datalen > 0) {
+       if (cmd->c_datalen > 0 && cmd->c_blklen > 0) {
                blksize = MIN(cmd->c_datalen, cmd->c_blklen);
                blkcount = cmd->c_datalen / blksize;
                if (cmd->c_datalen % blksize > 0) {


arch/armv7/stand/efiboot/efiboot.c:                     buf[i] ^= random[i % 
len];
arch/armv7/stand/efiboot/efiboot.c:                     buf[i] ^= random[i % 
len];

*safe


arch/armv7/stand/efiboot/efidev.c:              if (off % blks != 0 || nsect % 
blks != 0) {


*safe

arch/armv7/stand/efiboot/fdt.c:                 if ((cnt % sizeof(uint32_t)) == 
0)

*safe

arch/armv7/vexpress/pciecam.c:  if (rangeslen <= 0 || (rangeslen % 
sizeof(uint32_t)) ||


*safe

arch/hppa/hppa/pmap.c:      pmap_sdir_get(space); space = (space + 1) % 
hppa_sid_max);

*safe


arch/hppa/stand/mkboot/mkboot.c:        n = sizeof(int) - total % sizeof(int);
arch/hppa/stand/mkboot/mkboot.c:        if (total % sizeof(int)) {
arch/hppa/stand/mkboot/mkboot.c:        n = sizeof(buf) - total % sizeof(buf);


*safe

arch/luna88k/cbus/nec86hw.c:    if ((cc % bpf) != 0) {
arch/luna88k/cbus/nec86hw.c:    if ((cc % bpf) != 0) {


--- nec86hw.c   Tue Apr 11 06:29:40 2023
+++ /tmp/tfile  Sat Jul 29 12:32:46 2023
@@ -488,6 +488,10 @@
        int bpf;
 
        bpf = (sc->channels * sc->precision) / NBBY;    /* bytes per frame */
+       if (bpf == 0) {
+               DPRINTF(("nec86hw_pdma_output: FPE avoided\n"));
+               return EIO;
+       }
        if ((cc % bpf) != 0) {
                DPRINTF(("nec86hw_pdma_output: odd bytes\n"));
                return EIO;
@@ -545,6 +549,10 @@
        int bpf;
 
        bpf = (sc->channels * sc->precision) / NBBY;    /* bytes per frame */
+       if (bpf == 0) {
+               DPRINTF(("nec86hw_pdma_input: FPE avoided\n"));
+               return EIO;
+       }
        if ((cc % bpf) != 0) {
                DPRINTF(("nec86hw_pdma_input: odd bytes\n"));
                return EIO;


arch/macppc/dev/apm.c:  printf("%d%% charged\n", ((info.cur_charge * 100) / 
info.max_charge));


--- apm.c       Tue Apr 11 06:29:45 2023
+++ /tmp/tfile  Sat Jul 29 12:39:24 2023
@@ -130,7 +130,10 @@
        pm_battery_info(0, &info);
 
        printf(": battery flags 0x%X, ", info.flags);
-       printf("%d%% charged\n", ((info.cur_charge * 100) / info.max_charge));
+       if (info.max_charge != 0)
+               printf("%d%% charged\n", ((info.cur_charge * 100) / 
info.max_charge));
+       else
+               printf("NA%% charged\n");
 
 #ifdef SUSPEND
        device_register_wakeup(self);
@@ -256,8 +259,13 @@
 
                power->ac_state = ((batt.flags & PMU_PWR_AC_PRESENT) ?
                    APM_AC_ON : APM_AC_OFF);
-               power->battery_life =
-                   ((batt.cur_charge * 100) / batt.max_charge);
+
+               if (batt.max_charge != 0) {
+                       power->battery_life =
+                               ((batt.cur_charge * 100) / batt.max_charge);
+               } else {
+                       power->battery_life = 0;
+               }
 
                /*
                 * If the battery is charging, return the minutes left until

arch/octeon/dev/amdcf.c:        sc->sc_wrofs = ofs - (ofs - rofs) % 
sc->sc_wrbufsz;

*safe sc_wrbufsz cannot be 0 or else EFAULT higher up

arch/octeon/dev/octciu.c:               cpuid = irq % ncpus;
arch/octeon/dev/octciu.c:               ci = get_cpu_info(ih->ih_irq % ncpus);

*safe

arch/octeon/dev/octmmc.c:           cmd->c_datalen % sizeof(uint64_t) != 0) {

*safe

arch/octeon/dev/simplebus.c:    if (sc->sc_rangeslen > 0 && !(sc->sc_rangeslen 
% sizeof(uint32_t))) {
arch/octeon/dev/simplebus.c:    if (len > 0 && line > 0 && (len % line) == 0) {
arch/octeon/dev/simplebus.c:    if (len > 0 && (len % sizeof(uint32_t)) == 0) {

*safe

arch/powerpc64/dev/mainbus.c:   if (sc->sc_rangeslen > 0 && !(sc->sc_rangeslen 
% sizeof(uint32_t))) {

*safe

arch/powerpc64/dev/mainbus.c:   if (len > 0 && (len % line) == 0) {

--- mainbus.c   Fri Oct 21 07:20:38 2022
+++ /tmp/tfile  Sat Jul 29 13:07:19 2023
@@ -225,7 +225,7 @@
 
        len = OF_getproplen(node, "reg");
        line = (sc->sc_acells + sc->sc_scells) * sizeof(uint32_t);
-       if (len > 0 && (len % line) == 0) {
+       if (len > 0 && line > 0 && (len % line) == 0) {
                reg = malloc(len, M_TEMP, M_WAITOK);
                OF_getpropintarray(node, "reg", reg, len);
 


arch/powerpc64/dev/mainbus.c:   if (len > 0 && (len % sizeof(uint32_t)) == 0) {

*safe 

arch/powerpc64/dev/opal.c:      if (len > 0 && (len % sizeof(uint32_t)) != 0) {
arch/powerpc64/dev/opal.c:      if (flen <= 0 || flen % sizeof(flags[0]) != 0)
arch/powerpc64/dev/opal.c:      if (len <= 0 || len % sizeof(int) != 0 ||

*safe

arch/powerpc64/dev/phb.c:       if (rangeslen <= 0 || (rangeslen % 
sizeof(uint32_t)) ||
arch/powerpc64/dev/phb.c:       if (len <= 0 || (len % sizeof(uint32_t)))


*safe

arch/powerpc64/powerpc64/intr.c:        if (len <= 0 || (len % sizeof(uint32_t) 
!= 0))


*safe

arch/riscv64/dev/mainbus.c:     if (sc->sc_rangeslen > 0 && !(sc->sc_rangeslen 
% sizeof(uint32_t))) {
arch/riscv64/dev/mainbus.c:     if (len > 0 && (len % line) == 0) {


--- mainbus.c   Sun Jun 20 18:51:37 2021
+++ /tmp/tfile  Sat Jul 29 13:11:45 2023
@@ -210,7 +210,7 @@
 
        len = OF_getproplen(node, "reg");
        line = (sc->sc_acells + sc->sc_scells) * sizeof(uint32_t);
-       if (len > 0 && (len % line) == 0) {
+       if (len > 0 && line > 0 && (len % line) == 0) {
                reg = malloc(len, M_TEMP, M_WAITOK);
                OF_getpropintarray(node, "reg", reg, len);
 




arch/riscv64/dev/mainbus.c:     if (len > 0 && (len % sizeof(uint32_t)) == 0) {
arch/riscv64/dev/simplebus.c:       (sc->sc_rangeslen % sizeof(uint32_t)) == 0) 
{
arch/riscv64/dev/simplebus.c:       (sc->sc_dmarangeslen % sizeof(uint32_t)) == 
0) {
arch/riscv64/dev/simplebus.c:   if (len > 0 && line > 0 && (len % line) == 0) {
arch/riscv64/dev/simplebus.c:   if (len > 0 && (len % sizeof(uint32_t)) == 0) {


*safe


arch/riscv64/riscv64/intr.c:    if (len <= 0 || (len % sizeof(uint32_t) != 0))

*safe

arch/riscv64/stand/efiboot/efidev.c:            if (off % blks != 0 || nsect % 
blks != 0) {

*safe

arch/riscv64/stand/efiboot/fdt.c:                       if ((cnt % 
sizeof(uint32_t)) == 0)

*safe

arch/sparc64/dev/fd.c:          sec = fd->sc_blkno % type->seccyl;

*unsure about this (leaning towards safe)

arch/sparc64/dev/vdsp.c:                sc->sc_vd_ring[sc->sc_vd_prod % 
sc->sc_num_descriptors] = vd;
arch/sparc64/dev/vdsp.c:                vd = sc->sc_vd_ring[sc->sc_vd_cons++ % 
sc->sc_num_descriptors];

*seems safe (not sure)

arch/sparc64/dev/vpci.c:                        eq = CPU_INFO_UNIT(cpu) % 
pbm->vp_neq;

*safe

arch/sparc64/sparc64/autoconf.c:        if ((len % size) != 0)

*safe

arch/sparc64/sparc64/clock.c:   if (1000000 % hz) {

*safe

arch/sparc64/sparc64/disksubr.c:                        if (DL_GETPOFFSET(npp) 
% secpercyl)
arch/sparc64/sparc64/disksubr.c:                        if (DL_GETPOFFSET(npp) 
% secpercyl)


*see arch/sparc64/dev/fd.c, seems safe

crypto/arc4.c:          x = (x + 1) % klen;

--- arc4.c      Tue Sep 11 14:07:05 2007
+++ /tmp/tfile  Sat Jul 29 13:47:25 2023
@@ -32,6 +32,9 @@
        u_int8_t x, y;
        u_int32_t i;
 
+       if (klen == 0)
+               return;
+
        x = y = 0;
        for (i = 0; i < RC4STATE; i++)
                ctx->state[i] = i;


crypto/cryptosoft.c:    if (crd->crd_len % blks)

--- cryptosoft.c        Sun Oct 24 12:26:22 2021
+++ /tmp/tfile  Sat Jul 29 13:50:37 2023
@@ -111,7 +111,7 @@
        ivlen = exf->ivsize;
 
        /* Check for non-padded data */
-       if (crd->crd_len % blks)
+       if (blks != 0 && crd->crd_len % blks)
                return EINVAL;
 
        if (outtype == CRYPTO_BUF_MBUF)


crypto/siphash.c:       used = ctx->bytes % sizeof(ctx->buf);
crypto/siphash.c:       used = ctx->bytes % sizeof(ctx->buf);

*safe

ddb/db_dwarf.c:                 line += line_base + diff % line_range;

line_range could be 0 here, but I don't know how to fix this.

dev/audio.c:            r = a % b;
dev/audio.c:                    todo -= todo % nblk;
dev/audio.c:                    todo -= todo % nblk;
dev/audio.c:    max -= max % mult;
dev/audio.c:    min -= min % mult;
dev/audio.c:    sc->round -= sc->round % mult;
dev/audio.c:    sc->play.used -= sc->play.used % bpf;

--- audio.c     Tue Apr 11 06:30:25 2023
+++ /tmp/tfile  Sat Jul 29 14:07:33 2023
@@ -502,7 +502,7 @@
                sc->offs--;
                nblk = sc->rec.len / sc->rec.blksz;
                todo = -sc->offs;
-               if (todo >= nblk) {
+               if (nblk != 0 && todo >= nblk) {
                        todo -= todo % nblk;
                        DPRINTFN(1, "%s: rec ptr wrapped, moving %d blocks\n",
                            DEVNAME(sc), todo);
@@ -581,7 +581,7 @@
                sc->offs++;
                nblk = sc->play.len / sc->play.blksz;
                todo = sc->offs;
-               if (todo >= nblk) {
+               if (nblk != 0 && todo >= nblk) {
                        todo -= todo % nblk;
                        DPRINTFN(1, "%s: play ptr wrapped, moving %d blocks\n",
                            DEVNAME(sc), todo);
@@ -809,6 +809,11 @@
                        np = nr;
        }
        max = np < nr ? np : nr;
+       if (mult == 0) {
+               printf("%s: avoiding divide by zero in %s %d\n", DEVNAME(sc)
+                       , __FILE__, __LINE__);
+               return EIO;
+       }
        max -= max % mult;
        min = sc->rate / 1000 + mult - 1;
        min -= min % mult;
@@ -1524,6 +1529,10 @@
        /* discard partial samples, required by audio_fill_sil() */
        mtx_enter(&audio_lock);
        bpf = sc->pchan * sc->bps;
+       if (bpf == 0) {
+               mtx_leave(&audio_lock);
+               return 0;
+       }
        sc->play.used -= sc->play.used % bpf;
        if (sc->play.used == 0) {
                mtx_leave(&audio_lock);



dev/rnd.c: * returned is outside the range [0, 2**32 % upper_bound).  This
dev/rnd.c: * [2**32 % upper_bound, 2**32) which maps back to [0, upper_bound)
dev/rnd.c:      /* 2**32 % x == (2**32 - x) % x */
dev/rnd.c:      min = -upper_bound % upper_bound;
dev/rnd.c:      return r % upper_bound;
dev/rnd.c:              while (n % sizeof(u_int32_t))

*safe

dev/softraid_raid0.c:   chunk = strip_no % no_chunk;

--- softraid_raid0.c    Wed Mar 25 22:29:04 2020
+++ /tmp/tfile  Sat Jul 29 14:12:00 2023
@@ -132,6 +132,8 @@
        strip_size = sd->sd_meta->ssdi.ssd_strip_size;
        strip_bits = sd->mds.mdd_raid0.sr0_strip_bits;
        no_chunk = sd->sd_meta->ssdi.ssd_chunk_no;
+       if (no_chunk == 0)
+               goto bad;
 
        DNPRINTF(SR_D_DIS, "%s: %s: front end io: blkno %lld size %d\n",
            DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname,


dev/softraid_raid5.c:           chunk = strip_no % no_chunk;

--- softraid_raid5.c    Sun May 16 17:12:37 2021
+++ /tmp/tfile  Sat Jul 29 14:19:55 2023
@@ -394,6 +394,10 @@
        strip_size = sd->sd_meta->ssdi.ssd_strip_size;
        strip_bits = sd->mds.mdd_raid5.sr5_strip_bits;
        no_chunk = sd->sd_meta->ssdi.ssd_chunk_no - 1;
+
+       if (no_chunk == 0 || no_chunk == -1)
+               goto bad;
+
        row_size = (no_chunk << strip_bits) >> DEV_BSHIFT;
 
        data = xs->data;

dev/softraid_raid6.c:           chunk = strip_no % no_chunk;
dev/softraid_raid6.c:   /* use 2N pow table to avoid using % in multiply */

--- softraid_raid6.c    Sun May 16 17:12:37 2021
+++ /tmp/tfile  Sat Jul 29 14:26:31 2023
@@ -390,6 +390,10 @@
        strip_size = sd->sd_meta->ssdi.ssd_strip_size;
        strip_bits = sd->mds.mdd_raid6.sr6_strip_bits;
        no_chunk = sd->sd_meta->ssdi.ssd_chunk_no - 2;
+
+       if (no_chunk == 0 || no_chunk == -2)
+               goto bad;
+
        row_size = (no_chunk << strip_bits) >> DEV_BSHIFT;
 
        data = xs->data;


dev/acpi/acpi.c:        KASSERT((len % access_size) == 0);

--- acpi.c      Tue Apr 11 06:30:26 2023
+++ /tmp/tfile  Sat Jul 29 14:31:15 2023
@@ -247,7 +247,7 @@
        dnprintf(50, "gasio: %.2x 0x%.8llx %s\n",
            iospace, address, (iodir == ACPI_IOWRITE) ? "write" : "read");
 
-       KASSERT((len % access_size) == 0);
+       KASSERT(access_size != 0 && (len % access_size) == 0);
 
        pb = (uint8_t *)buffer;
        switch (iospace) {

dev/acpi/acpidmar.c:            fri = (fri + 1) % nfr;

*safe

dev/acpi/dsdt.c:                rv += (val % iradix) * pwr;
dev/acpi/dsdt.c:                res = (lhs % rhs);
dev/acpi/dsdt.c:        KASSERT((len % access_size) == 0);

--- dsdt.c      Thu Dec  9 21:21:35 2021
+++ /tmp/tfile  Sat Jul 29 14:39:17 2023
@@ -1130,7 +1130,10 @@
                res = (lhs / rhs);
                break;
        case AMLOP_MOD:
-               res = (lhs % rhs);
+               if (rhs == 0)           /* XXX bad AMLOP mod with rhs == 0 */
+                       res = 0;
+               else
+                       res = (lhs % rhs);
                break;
        case AMLOP_SHL:
                res = (lhs << rhs);
@@ -2336,7 +2339,7 @@
        dnprintf(50, "genio: %.2x 0x%.8llx %s\n",
            iospace, address, (iodir == ACPI_IOWRITE) ? "write" : "read");
 
-       KASSERT((len % access_size) == 0);
+       KASSERT(access_size != 0 && (len % access_size) == 0);
 
        pb = (uint8_t *)buffer;
        for (reg = 0; reg < len; reg += access_size) {



dev/ata/ata_wdc.c:                      sect = blkno % ata_bio->lp->d_nsectors;
dev/ata/ata_wdc.c:                      head = blkno % ata_bio->lp->d_ntracks;

--- ata_wdc.c   Fri Nov  2 10:59:36 2018
+++ /tmp/tfile  Sat Jul 29 14:45:51 2023
@@ -300,6 +300,13 @@
                        head |= WDSD_LBA;
                } else {
                        int blkno = ata_bio->blkno;
+
+                       if (ata_bio->lp->d_ntracks == 0 ||  \
+                                       ata_bio->lp->d_nsectors) { 
+                               wdc_ata_bio_done(chp, xfer);
+                               return;
+                       }
+
                        sect = blkno % ata_bio->lp->d_nsectors;
                        sect++;    /* Sectors begin with 1, not 0. */
                        blkno /= ata_bio->lp->d_nsectors;



* this could be wrong too in wdc_ata_bio_done()...

dev/ata/wd.c:   if ((size % lp->d_secsize) != 0)

--- wd.c        Tue Apr 11 06:30:26 2023
+++ /tmp/tfile  Sat Jul 29 14:48:03 2023
@@ -921,7 +921,7 @@
 
        /* Convert to disk sectors.  Request must be a multiple of size. */
        lp = wd->sc_dk.dk_label;
-       if ((size % lp->d_secsize) != 0)
+       if (lp->d_secsize != 0 && (size % lp->d_secsize) != 0)
                return EFAULT;
        nblks = size / lp->d_secsize;
        blkno = blkno / (lp->d_secsize / DEV_BSIZE);


dev/fdt/bcm2711_pcie.c: if (rangeslen <= 0 || (rangeslen % sizeof(uint32_t)) ||
dev/fdt/bcm2711_pcie.c:         if ((rangeslen % sizeof(uint32_t)) ||


*safe

dev/fdt/bcm2835_sdhost.c:               if (nblks == 0 || (cmd->c_datalen % 
cmd->c_blklen) != 0)


--- bcm2835_sdhost.c    Fri Oct 21 07:20:46 2022
+++ /tmp/tfile  Sat Jul 29 14:51:25 2023
@@ -436,7 +436,7 @@
                        cmdval |= SDCMD_WRITE;
 
                nblks = cmd->c_datalen / cmd->c_blklen;
-               if (nblks == 0 || (cmd->c_datalen % cmd->c_blklen) != 0)
+               if (nblks == 0 || (cmd->c_blklen != 0 && (cmd->c_datalen % 
cmd->c_blklen) != 0))
                        ++nblks;
 
                bcmsdhost_write(sc, SDHBCT, cmd->c_blklen);



dev/fdt/dwmmc.c:        if (blklen % sc->sc_fifo_width == 0)
*safe

dev/fdt/dwpcie.c:       if (rangeslen <= 0 || (rangeslen % sizeof(uint32_t)) ||
*safe

dev/fdt/imxesdhc.c:             if (cmd->c_datalen % blksize > 0) {

--- imxesdhc.c  Sun Jan  9 06:42:37 2022
+++ /tmp/tfile  Sat Jul 29 14:55:34 2023
@@ -882,7 +882,7 @@
         */
 
        /* Fragment the data into proper blocks. */
-       if (cmd->c_datalen > 0) {
+       if (cmd->c_datalen > 0 && cmd->c_blklen > 0) {
                blksize = MIN(cmd->c_datalen, cmd->c_blklen);
                blkcount = cmd->c_datalen / blksize;
                if (cmd->c_datalen % blksize > 0) {


dev/fdt/mvkpcie.c:      if (rangeslen <= 0 || (rangeslen % sizeof(uint32_t)) ||
dev/fdt/pciecam.c:      if (rangeslen <= 0 || (rangeslen % sizeof(uint32_t)) ||

*safe

dev/fdt/rkclock.c:              d = n % d;

*safe

dev/fdt/simpleaudio.c:          if (len % sizeof(uint32_t) != 0)
*safe

dev/ic/aic79xx.c:       if ((sg_prefetch_align % sg_size) != 0

*safe

dev/ic/anvar.h:#define AN_INC(x, y)             (x) = (x + 1) % y

*safe

dev/ic/atw.c:    *   (uint32_t)((((uint64_t)tsfth << 32) | tsftl) % ival)
dev/ic/atw.c:    *     (0x100000000 * H + L) % m
dev/ic/atw.c:    *   = ((0x100000000 % m) * H + L) % m
dev/ic/atw.c:    *   = (((0xffffffff + 1) % m) * H + L) % m
dev/ic/atw.c:    *   = ((0xffffffff % m + 1 % m) * H + L) % m
dev/ic/atw.c:    *   = ((0xffffffff % m + 1) * H + L) % m
dev/ic/atw.c:   return ((0xFFFFFFFF % ival + 1) * tsfth + tsftl) % ival;
dev/ic/atw.c:   remainder = (bitlen * 2) % rate;
dev/ic/atw.c:   lastlen0 = paylen % fraglen;

--- atw.c       Fri Oct 21 07:20:47 2022
+++ /tmp/tfile  Sat Jul 29 15:10:27 2023
@@ -2397,6 +2397,10 @@
         *   = ((0xffffffff % m + 1 % m) * H + L) % m
         *   = ((0xffffffff % m + 1) * H + L) % m
         */
+
+       if (ival == (uint32_t)-1 || ival == 0)          /* XXX */
+               ival = 1;
+               
        return ((0xFFFFFFFF % ival + 1) * tsfth + tsftl) % ival;
 }
 
@@ -3468,6 +3472,9 @@
 {
        int ack, rc;
        int firstlen, hdrlen, lastlen, lastlen0, npkt, overlen, paylen;
+
+       if (fraglen == 0)
+               return -1;
 
        if (ieee80211_has_addr4(wh))
                hdrlen = sizeof(struct ieee80211_frame_addr4);





dev/ic/ciss.c:                  bd->bd_target = ldp->tgts[pd] % sc->ndrives;

*safe?

dev/ic/dcreg.h:#define DC_INC(x, y)     (x) = (x + 1) % y

*safe

dev/ic/dp8390.c:        if ((sc->txb_next_tx + sc->txb_inuse) % sc->txb_cnt != 
sc->txb_new)

--- dp8390.c    Sun Jan  9 06:42:38 2022
+++ /tmp/tfile  Sat Jul 29 15:15:17 2023
@@ -373,6 +373,9 @@
        u_short len;
 
 #ifdef DIAGNOSTIC
+       if (sc->txb_cnt == 0)
+               panic("dp8390_xmit: fix my FP exception!");
+
        if ((sc->txb_next_tx + sc->txb_inuse) % sc->txb_cnt != sc->txb_new)
                panic("dp8390_xmit: desync, next_tx=%d inuse=%d cnt=%d new=%d",
                    sc->txb_next_tx, sc->txb_inuse, sc->txb_cnt, sc->txb_new);




ENDHERE, LATERMORE

Reply via email to