Hack to work around a NULL pointer dereferencation that can be triggered

by removing a floppy that as being operated on.

The spagghetti is hardly understandable at all anymore, so i can't
100 % ascertain this is really the Right Thing to do, maybe our new
floppy driver maintainer, Jesus Monroy Jr can do this. :-))
This commit is contained in:
Joerg Wunsch 1999-07-21 12:19:44 +00:00
parent 6134dbe0ac
commit 409aadb1c9
2 changed files with 10 additions and 2 deletions

View File

@ -47,7 +47,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)fd.c 7.4 (Berkeley) 5/25/91 * from: @(#)fd.c 7.4 (Berkeley) 5/25/91
* $Id: fd.c,v 1.147 1999/06/26 02:46:52 mckusick Exp $ * $Id: fd.c,v 1.148 1999/07/04 14:58:32 phk Exp $
* *
*/ */
@ -2127,6 +2127,9 @@ retrier(struct fdc_data *fdc)
fail: fail:
{ {
dev_t sav_b_dev = bp->b_dev; dev_t sav_b_dev = bp->b_dev;
if (fdc->fd == 0)
goto bogus;
/* Trick diskerr */ /* Trick diskerr */
bp->b_dev = makedev(major(bp->b_dev), bp->b_dev = makedev(major(bp->b_dev),
(FDUNIT(minor(bp->b_dev))<<3)|RAW_PART); (FDUNIT(minor(bp->b_dev))<<3)|RAW_PART);
@ -2160,6 +2163,7 @@ retrier(struct fdc_data *fdc)
DEVSTAT_WRITE); DEVSTAT_WRITE);
fdc->fd->skip = 0; fdc->fd->skip = 0;
biodone(bp); biodone(bp);
bogus:
fdc->state = FINDWORK; fdc->state = FINDWORK;
fdc->flags |= FDC_NEEDS_RESET; fdc->flags |= FDC_NEEDS_RESET;
fdc->fd = (fd_p) 0; fdc->fd = (fd_p) 0;

View File

@ -47,7 +47,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)fd.c 7.4 (Berkeley) 5/25/91 * from: @(#)fd.c 7.4 (Berkeley) 5/25/91
* $Id: fd.c,v 1.147 1999/06/26 02:46:52 mckusick Exp $ * $Id: fd.c,v 1.148 1999/07/04 14:58:32 phk Exp $
* *
*/ */
@ -2127,6 +2127,9 @@ retrier(struct fdc_data *fdc)
fail: fail:
{ {
dev_t sav_b_dev = bp->b_dev; dev_t sav_b_dev = bp->b_dev;
if (fdc->fd == 0)
goto bogus;
/* Trick diskerr */ /* Trick diskerr */
bp->b_dev = makedev(major(bp->b_dev), bp->b_dev = makedev(major(bp->b_dev),
(FDUNIT(minor(bp->b_dev))<<3)|RAW_PART); (FDUNIT(minor(bp->b_dev))<<3)|RAW_PART);
@ -2160,6 +2163,7 @@ retrier(struct fdc_data *fdc)
DEVSTAT_WRITE); DEVSTAT_WRITE);
fdc->fd->skip = 0; fdc->fd->skip = 0;
biodone(bp); biodone(bp);
bogus:
fdc->state = FINDWORK; fdc->state = FINDWORK;
fdc->flags |= FDC_NEEDS_RESET; fdc->flags |= FDC_NEEDS_RESET;
fdc->fd = (fd_p) 0; fdc->fd = (fd_p) 0;