forked from KolibriOS/kolibrios
Fix for GPT partitions scan.
GPT partition entry array (GPEA) has 128 entries by default, unused ones must be zeroed. Due to memory corruption GPEA contained non-zero data of first sectors of partitions. This led to fake partitions detected which were mostly filtered out by their start:length and thus didn't show up. Pass ebx=three-sector-sized buffer to disk_add_partition as expected. git-svn-id: svn://kolibrios.org@7270 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ccd8fdd477
commit
02da1fd4f3
@ -960,11 +960,10 @@ endl
|
|||||||
pop eax
|
pop eax
|
||||||
jnz .fail_free_gpea_gpt
|
jnz .fail_free_gpea_gpt
|
||||||
; Compute and check CRC32 of GPEA
|
; Compute and check CRC32 of GPEA
|
||||||
mov edx, [ebx+GPTH.PartitionEntryArrayCRC32]
|
|
||||||
mov eax, -1
|
mov eax, -1
|
||||||
stdcall crc_32, 0xEDB88320, edi, [GPEA_len]
|
stdcall crc_32, 0xEDB88320, edi, [GPEA_len]
|
||||||
xor eax, -1
|
xor eax, -1
|
||||||
cmp eax, edx
|
cmp eax, [ebx+GPTH.PartitionEntryArrayCRC32]
|
||||||
jnz .fail_free_gpea_gpt
|
jnz .fail_free_gpea_gpt
|
||||||
|
|
||||||
; Process partitions, skip zeroed ones.
|
; Process partitions, skip zeroed ones.
|
||||||
@ -982,8 +981,11 @@ endl
|
|||||||
sbb edx, dword[edi+GPE.StartingLBA+4]
|
sbb edx, dword[edi+GPE.StartingLBA+4]
|
||||||
add eax, 1
|
add eax, 1
|
||||||
adc edx, 0
|
adc edx, 0
|
||||||
|
push ebx
|
||||||
|
mov ebx, [ebp-8] ; three-sectors-sized buffer
|
||||||
stdcall disk_add_partition, dword[edi+GPE.StartingLBA+0], \
|
stdcall disk_add_partition, dword[edi+GPE.StartingLBA+0], \
|
||||||
dword[edi+GPE.StartingLBA+4], eax, edx, esi
|
dword[edi+GPE.StartingLBA+4], eax, edx, esi
|
||||||
|
pop ebx
|
||||||
add edi, [ebx+GPTH.SizeOfPartitionEntry]
|
add edi, [ebx+GPTH.SizeOfPartitionEntry]
|
||||||
.skip:
|
.skip:
|
||||||
dec [ebx+GPTH.NumberOfPartitionEntries]
|
dec [ebx+GPTH.NumberOfPartitionEntries]
|
||||||
|
Loading…
Reference in New Issue
Block a user