Hi There are more undefined behaviour reports in our network drivers
kubsan: dev/pci/if_em_hw.c:7625:38: shift: left shift of 65535 by 16 places cannot be represented in type 'int' kubsan: dev/pci/if_ix.c:3403:18: shift: left shift of 255 by 24 places cannot be represented in type 'int' kubsan: dev/pci/if_ix.c:3404:19: shift: left shift of 131 by 24 places cannot be represented in type 'int' kubsan: dev/pci/ixgbe_82598.c:547:26: signed integer overflow: 65535 * 65537 cannot be represented in type 'int' kubsan: dev/pci/if_ix.c:3422:19: shift: left shift of 255 by 24 places cannot be represented in type 'int' kubsan: dev/pci/if_ix.c:3423:20: shift: left shift of 129 by 24 places cannot be represented in type 'int' kubsan: dev/pci/ixgbe.c:2381:26: signed integer overflow: 65535 * 65537 cannot be represented in type 'int' ok? bluhm Index: dev/pci/if_em_hw.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/if_em_hw.c,v retrieving revision 1.113 diff -u -p -r1.113 if_em_hw.c --- dev/pci/if_em_hw.c 9 Jan 2022 05:42:50 -0000 1.113 +++ dev/pci/if_em_hw.c 24 Jan 2022 17:23:25 -0000 @@ -7622,7 +7622,7 @@ em_read_part_num(struct em_hw *hw, uint3 return -E1000_ERR_EEPROM; } /* Save word 0 in upper half of part_num */ - *part_num = (uint32_t) (eeprom_data << 16); + *part_num = (uint32_t)eeprom_data << 16; /* Get word 1 from EEPROM */ if (em_read_eeprom(hw, ++offset, 1, &eeprom_data) < 0) { Index: dev/pci/if_ix.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/if_ix.c,v retrieving revision 1.180 diff -u -p -r1.180 if_ix.c --- dev/pci/if_ix.c 27 Jul 2021 01:44:55 -0000 1.180 +++ dev/pci/if_ix.c 24 Jan 2022 17:23:25 -0000 @@ -3400,8 +3400,8 @@ ixgbe_set_ivar(struct ix_softc *sc, uint entry += (type * 64); index = (entry >> 2) & 0x1F; ivar = IXGBE_READ_REG(hw, IXGBE_IVAR(index)); - ivar &= ~(0xFF << (8 * (entry & 0x3))); - ivar |= (vector << (8 * (entry & 0x3))); + ivar &= ~((uint32_t)0xFF << (8 * (entry & 0x3))); + ivar |= ((uint32_t)vector << (8 * (entry & 0x3))); IXGBE_WRITE_REG(&sc->hw, IXGBE_IVAR(index), ivar); break; @@ -3413,14 +3413,14 @@ ixgbe_set_ivar(struct ix_softc *sc, uint if (type == -1) { /* MISC IVAR */ index = (entry & 1) * 8; ivar = IXGBE_READ_REG(hw, IXGBE_IVAR_MISC); - ivar &= ~(0xFF << index); - ivar |= (vector << index); + ivar &= ~((uint32_t)0xFF << index); + ivar |= ((uint32_t)vector << index); IXGBE_WRITE_REG(hw, IXGBE_IVAR_MISC, ivar); } else { /* RX/TX IVARS */ index = (16 * (entry & 1)) + (8 * type); ivar = IXGBE_READ_REG(hw, IXGBE_IVAR(entry >> 1)); - ivar &= ~(0xFF << index); - ivar |= (vector << index); + ivar &= ~((uint32_t)0xFF << index); + ivar |= ((uint32_t)vector << index); IXGBE_WRITE_REG(hw, IXGBE_IVAR(entry >> 1), ivar); } Index: dev/pci/ixgbe.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/ixgbe.c,v retrieving revision 1.26 diff -u -p -r1.26 ixgbe.c --- dev/pci/ixgbe.c 2 Mar 2020 01:59:01 -0000 1.26 +++ dev/pci/ixgbe.c 24 Jan 2022 17:23:25 -0000 @@ -2378,7 +2378,7 @@ int32_t ixgbe_fc_enable_generic(struct i } /* Configure pause time (2 TCs per register) */ - reg = hw->fc.pause_time * 0x00010001; + reg = (uint32_t)hw->fc.pause_time * 0x00010001; for (i = 0; i < (IXGBE_DCB_MAX_TRAFFIC_CLASS / 2); i++) IXGBE_WRITE_REG(hw, IXGBE_FCTTV(i), reg); Index: dev/pci/ixgbe_82598.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/ixgbe_82598.c,v retrieving revision 1.19 diff -u -p -r1.19 ixgbe_82598.c --- dev/pci/ixgbe_82598.c 9 Jan 2022 05:42:56 -0000 1.19 +++ dev/pci/ixgbe_82598.c 24 Jan 2022 17:23:25 -0000 @@ -544,7 +544,7 @@ int32_t ixgbe_fc_enable_82598(struct ixg } /* Configure pause time (2 TCs per register) */ - reg = hw->fc.pause_time * 0x00010001; + reg = (uint32_t)hw->fc.pause_time * 0x00010001; for (i = 0; i < (IXGBE_DCB_MAX_TRAFFIC_CLASS / 2); i++) IXGBE_WRITE_REG(hw, IXGBE_FCTTV(i), reg);