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)

Reply via email to