Module Name: src Committed By: msaitoh Date: Sat Feb 8 08:23:01 UTC 2020
Modified Files: src/sys/dev/ic: aic79xx_inline.h Log Message: Apply FreeBSD r357300: > aic7xxx(4): Fix unintended sign extension in ahd_inq() > > ahd_inb() returns type uint8_t. The shift left by untyped 24 implicitly > promotes the result to type (signed) int. Then the binary OR with uint64_t > values sign-extends the integer. If bit 31 of the read value happened to be > set, the 64-bit result would have all upper 32 bits set to 1 due to OR. > This is clearly not intended. > > Reported by: Coverity > CID: 980473 (old one!) To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/dev/ic/aic79xx_inline.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/aic79xx_inline.h diff -u src/sys/dev/ic/aic79xx_inline.h:1.22 src/sys/dev/ic/aic79xx_inline.h:1.23 --- src/sys/dev/ic/aic79xx_inline.h:1.22 Sat Apr 27 13:25:09 2013 +++ src/sys/dev/ic/aic79xx_inline.h Sat Feb 8 08:23:01 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: aic79xx_inline.h,v 1.22 2013/04/27 13:25:09 kardel Exp $ */ +/* $NetBSD: aic79xx_inline.h,v 1.23 2020/02/08 08:23:01 msaitoh Exp $ */ /* * Inline routines shareable across OS platforms. @@ -548,7 +548,7 @@ ahd_inq(struct ahd_softc *ahd, u_int por return ((ahd_inb(ahd, port)) | (ahd_inb(ahd, port+1) << 8) | (ahd_inb(ahd, port+2) << 16) - | (ahd_inb(ahd, port+3) << 24) + | (((uint64_t)ahd_inb(ahd, port+3)) << 24) | (((uint64_t)ahd_inb(ahd, port+4)) << 32) | (((uint64_t)ahd_inb(ahd, port+5)) << 40) | (((uint64_t)ahd_inb(ahd, port+6)) << 48)