svn commit: r277622 - head/sys/boot/i386/libfirewire

Will Andrews will at FreeBSD.org
Fri Jan 23 23:53:57 UTC 2015


Author: will
Date: Fri Jan 23 23:53:56 2015
New Revision: 277622
URL: https://svnweb.freebsd.org/changeset/base/277622

Log:
  Fix panic in firewire and creation of invalid config ROM.
  (This change was supposed to be included in r277508.)
  
  sys/boot/i386/libfirewire/firewire.c:
  	Fix configuration ROM generation count wrapping logic
  	so that the generation count is never outside of
  	allowed limits (0x2 -> 0xF).
  
  Submitted by:	gibbs
  MFC after:	1 week
  MFC with:	277508
  Sponsored by:	Spectra Logic
  MFSpectraBSD:	1110685 on 2015/01/05

Modified:
  head/sys/boot/i386/libfirewire/firewire.c

Modified: head/sys/boot/i386/libfirewire/firewire.c
==============================================================================
--- head/sys/boot/i386/libfirewire/firewire.c	Fri Jan 23 23:52:33 2015	(r277621)
+++ head/sys/boot/i386/libfirewire/firewire.c	Fri Jan 23 23:53:56 2015	(r277622)
@@ -233,7 +233,8 @@ fw_init_crom(struct fwohci_softc *sc)
 	src->businfo.cyc_clk_acc = 100;
 	src->businfo.max_rec = sc->maxrec;
 	src->businfo.max_rom = MAXROM_4;
-	src->businfo.generation = 1;
+#define FW_GENERATION_CHANGEABLE 2
+	src->businfo.generation = FW_GENERATION_CHANGEABLE;
 	src->businfo.link_spd = sc->speed;
 
 	src->businfo.eui64.hi = sc->eui.hi;
@@ -313,11 +314,14 @@ fw_crom(struct fwohci_softc *sc)
 	src = &sc->crom_src_buf->src;
 	crom_load(src, (uint32_t *)newrom, CROMSIZE);
 	if (bcmp(newrom, sc->config_rom, CROMSIZE) != 0) {
-		/* bump generation and reload */
-		src->businfo.generation ++;
-		/* generation must be between 0x2 and 0xF */
+		/* Bump generation and reload. */
+		src->businfo.generation++;
+
+		/* Handle generation count wraps. */
 		if (src->businfo.generation < 2)
-			src->businfo.generation ++;
+			src->businfo.generation = 2;
+
+		/* Recalculate CRC to account for generation change. */
 		crom_load(src, (uint32_t *)newrom, CROMSIZE);
 		bcopy(newrom, (void *)sc->config_rom, CROMSIZE);
 	}


More information about the svn-src-head mailing list