Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 Oct 2003 06:32:29 +0100
From:      Juan Manuel Sanchez <juanmasf@mi.madritel.es>
To:        freebsd-stable@freebsd.org
Subject:   [PATCH] avoid kernel panic during ATA probe
Message-ID:  <3FA1F3ED.1010306@mi.madritel.es>

next in thread | raw e-mail | index | archive | help
The ata raid code in STABLE allows 15 seconds for reading the disk 
headers. If during probe the ata channels need several resets to find a 
working configuration that time might be exceeded. When the request 
finally succeds the buffer was already freed by ar_rw(), and kernel 
panics at any access to corrupt pointers.

Try this simple patch:

-----------------------------------------------------------------------
Index: ata-raid.c
===================================================================
RCS file: /usr/home/ncvs/src/sys/dev/ata/ata-raid.c,v
retrieving revision 1.3.2.19
diff -w -u -r1.3.2.19 ata-raid.c
--- ata-raid.c	30 Jan 2003 07:19:59 -0000	1.3.2.19
+++ ata-raid.c	30 Oct 2003 22:28:30 -0000
@@ -1427,8 +1427,8 @@
      AR_STRATEGY((struct buf *)bp);

      if (flags & AR_WAIT) {
-	while ((retry++ < (15*hz/10)) && (error = !(bp->b_flags & B_DONE)))
-	    error = tsleep(bp, PRIBIO, "arrw", 10);
+	/* AR_STRATEGY success or timeout will wake us up */
+	error = tsleep(bp, PRIBIO, "arrw", 0);
  	if (!error && (bp->b_flags & B_ERROR))
  	    error = bp->b_error;
  	free(bp, M_AR);
-----------------------------------------------------------------------



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3FA1F3ED.1010306>