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

(-)a/pe-relocate.c (-4 / +23 lines)
Lines 309-315 static int Link Here
309
image_is_64_bit(EFI_IMAGE_OPTIONAL_HEADER_UNION *PEHdr)
309
image_is_64_bit(EFI_IMAGE_OPTIONAL_HEADER_UNION *PEHdr)
310
{
310
{
311
	/* .Magic is the same offset in all cases */
311
	/* .Magic is the same offset in all cases */
312
	if (PEHdr->Pe32Plus.OptionalHeader.Magic
312
	if (PEHdr->Pe32.OptionalHeader.Magic
313
			== EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC)
313
			== EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC)
314
		return 1;
314
		return 1;
315
	return 0;
315
	return 0;
Lines 375-388 read_header(void *data, unsigned int datasize, Link Here
375
	unsigned long HeaderWithoutDataDir, SectionHeaderOffset, OptHeaderSize;
375
	unsigned long HeaderWithoutDataDir, SectionHeaderOffset, OptHeaderSize;
376
	unsigned long FileAlignment = 0;
376
	unsigned long FileAlignment = 0;
377
	UINT16 DllFlags;
377
	UINT16 DllFlags;
378
	size_t dos_sz = 0;
378
379
379
	if (datasize < sizeof (PEHdr->Pe32)) {
380
	if (datasize < sizeof (*DosHdr)) {
380
		perror(L"Invalid image\n");
381
		perror(L"Invalid image\n");
381
		return EFI_UNSUPPORTED;
382
		return EFI_UNSUPPORTED;
382
	}
383
	}
383
384
384
	if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE)
385
	if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) {
386
		if (DosHdr->e_lfanew < sizeof (*DosHdr) ||
387
		    DosHdr->e_lfanew > datasize - 4) {
388
			perror(L"Invalid image\n");
389
			return EFI_UNSUPPORTED;
390
		}
391
392
		dos_sz = DosHdr->e_lfanew;
385
		PEHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)((char *)data + DosHdr->e_lfanew);
393
		PEHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)((char *)data + DosHdr->e_lfanew);
394
	}
395
396
	if (datasize - dos_sz < sizeof (PEHdr->Pe32)) {
397
		perror(L"Invalid image\n");
398
		return EFI_UNSUPPORTED;
399
	}
400
401
	if (image_is_64_bit(PEHdr) &&
402
	    (datasize - dos_sz < sizeof (PEHdr->Pe32Plus))) {
403
		perror(L"Invalid image\n");
404
		return EFI_UNSUPPORTED;
405
	}
386
406
387
	if (!image_is_loadable(PEHdr)) {
407
	if (!image_is_loadable(PEHdr)) {
388
		perror(L"Platform does not support this image\n");
408
		perror(L"Platform does not support this image\n");
389
- 

Return to bug 1215103