mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 21:05:08 +00:00
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
This commit is contained in:
parent
b1485f3337
commit
0d0ffe4faa
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340049
|
@ -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)
|
||||
|
@ -569,6 +574,9 @@ bd_realstrategy(void *devdata, int rw, daddr_t dblk, size_t size,
|
|||
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
|
||||
* process partial reads below, the strategy mechanism is built
|
||||
|
|
Loading…
Reference in a new issue