svn commit: r340049 - head/stand/i386/libi386
Toomas Soome
tsoome at FreeBSD.org
Fri Nov 2 11:41:59 UTC 2018
Author: tsoome
Date: Fri Nov 2 11:41:58 2018
New Revision: 340049
URL: https://svnweb.freebsd.org/changeset/base/340049
Log:
loader: biosdisk should check if the media is present
The bd_print/bd_open/bd_strategy need to make sure the device does have
media, before getting into performing IO operations. Some systems can
hung if the device without a media is accessed.
Reported by: yuripv
Modified:
head/stand/i386/libi386/biosdisk.c
Modified: head/stand/i386/libi386/biosdisk.c
==============================================================================
--- head/stand/i386/libi386/biosdisk.c Fri Nov 2 10:18:56 2018 (r340048)
+++ head/stand/i386/libi386/biosdisk.c Fri Nov 2 11:41:58 2018 (r340049)
@@ -418,6 +418,9 @@ bd_print(int verbose)
if ((ret = pager_output(line)) != 0)
break;
+ if ((bdinfo[i].bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA)
+ continue;
+
dev.dd.d_dev = &biosdisk;
dev.dd.d_unit = i;
dev.d_slice = -1;
@@ -464,6 +467,8 @@ bd_open(struct open_file *f, ...)
if ((BD(dev).bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA) {
if (!bd_int13probe(&BD(dev)))
return (EIO);
+ if ((BD(dev).bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA)
+ return (EIO);
}
BD(dev).bd_open++;
if (BD(dev).bd_bcache == NULL)
@@ -568,6 +573,9 @@ bd_realstrategy(void *devdata, int rw, daddr_t dblk, s
size_t blks, blkoff, bsize, rest;
caddr_t bbuf;
int rc;
+
+ if ((BD(dev).bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA)
+ return (EIO);
/*
* First make sure the IO size is a multiple of 512 bytes. While we do
More information about the svn-src-all
mailing list