efipart: Support an arbitrary number of partitions

Don't crash if the user has more than 31 of them.  A follow-up to
r298230.

Reviewed by:	allanjude
Relnotes:	maybe
Sponsored by:	EMC / Isilon Storage Division
Differential Revision:	https://reviews.freebsd.org/D6212
This commit is contained in:
Conrad Meyer 2016-05-05 00:07:08 +00:00
parent 148ed57165
commit 3d5b6ffbf8

View file

@ -65,14 +65,12 @@ struct devsw efipart_dev = {
/*
* info structure to support bcache
*/
#define MAXPDDEV 31 /* see MAXDEV in libi386.h */
static struct pdinfo
{
struct pdinfo {
int pd_unit; /* unit number */
int pd_open; /* reference counter */
void *pd_bcache; /* buffer cache data */
} pdinfo [MAXPDDEV];
};
static struct pdinfo *pdinfo;
static int npdinfo = 0;
#define PD(dev) (pdinfo[(dev)->d_unit])
@ -109,6 +107,9 @@ efipart_init(void)
nout = 0;
bzero(aliases, nin * sizeof(EFI_HANDLE));
pdinfo = malloc(nin * sizeof(*pdinfo));
if (pdinfo == NULL)
return (ENOMEM);
for (n = 0; n < nin; n++) {
status = BS->HandleProtocol(hin[n], &devpath_guid,