View | Details | Raw Unified | Return to bug 197641
Collapse All | Expand All

(-)sys/boot/efi/libefi/efipart.c (-5 / +18 lines)
Lines 63-75 Link Here
63
efipart_init(void) 
63
efipart_init(void) 
64
{
64
{
65
	EFI_BLOCK_IO *blkio;
65
	EFI_BLOCK_IO *blkio;
66
	EFI_DEVICE_PATH *devpath, *node;
66
	EFI_DEVICE_PATH *devpath, *devpathcpy, *tmpdevpath, *node;
67
	EFI_HANDLE *hin, *hout, *aliases, handle;
67
	EFI_HANDLE *hin, *hout, *aliases, handle;
68
	EFI_STATUS status;
68
	EFI_STATUS status;
69
	UINTN sz;
69
	UINTN sz;
70
	CHAR16 *path;
70
	CHAR16 *path;
71
	u_int n, nin, nout;
71
	u_int n, nin, nout;
72
	int err;
72
	int err;
73
	size_t devpathlen;
73
74
74
	sz = 0;
75
	sz = 0;
75
	hin = NULL;
76
	hin = NULL;
Lines 98-106 Link Here
98
		if (EFI_ERROR(status)) {
99
		if (EFI_ERROR(status)) {
99
			continue;
100
			continue;
100
		}
101
		}
102
101
		node = devpath;
103
		node = devpath;
102
		while (!IsDevicePathEnd(NextDevicePathNode(node)))
104
		devpathlen = DevicePathNodeLength(node);
105
		while (!IsDevicePathEnd(NextDevicePathNode(node))) {
103
			node = NextDevicePathNode(node);
106
			node = NextDevicePathNode(node);
107
			devpathlen += DevicePathNodeLength(node);
108
		}
109
		devpathlen += DevicePathNodeLength(NextDevicePathNode(node));
110
104
		status = BS->HandleProtocol(hin[n], &blkio_guid,
111
		status = BS->HandleProtocol(hin[n], &blkio_guid,
105
		    (void**)&blkio);
112
		    (void**)&blkio);
106
		if (EFI_ERROR(status))
113
		if (EFI_ERROR(status))
Lines 117-126 Link Here
117
		 */
124
		 */
118
		if (DevicePathType(node) == MEDIA_DEVICE_PATH &&
125
		if (DevicePathType(node) == MEDIA_DEVICE_PATH &&
119
		    DevicePathSubType(node) == MEDIA_CDROM_DP) {
126
		    DevicePathSubType(node) == MEDIA_CDROM_DP) {
120
			node->Type = END_DEVICE_PATH_TYPE;
127
			devpathcpy = malloc(devpathlen);
121
			node->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE;
128
			memcpy(devpathcpy, devpath, devpathlen);
122
			status = BS->LocateDevicePath(&blkio_guid, &devpath,
129
			node = devpathcpy;
130
			while (!IsDevicePathEnd(NextDevicePathNode(node)))
131
				node = NextDevicePathNode(node);
132
			SetDevicePathEndNode(node);
133
			tmpdevpath = devpathcpy;
134
			status = BS->LocateDevicePath(&blkio_guid, &tmpdevpath,
123
			    &handle);
135
			    &handle);
136
			free(devpathcpy);
124
			if (EFI_ERROR(status))
137
			if (EFI_ERROR(status))
125
				continue;
138
				continue;
126
			hout[nout] = handle;
139
			hout[nout] = handle;

Return to bug 197641