disk: Add additional volume_index_i overflow guards

This commit is contained in:
mintsuki 2023-08-17 12:55:58 -05:00
parent 50f87fc3f6
commit a425f1ca2f
1 changed files with 17 additions and 10 deletions

View File

@ -227,11 +227,6 @@ void disk_create_index(void) {
int optical_indices = 1, hdd_indices = 1; int optical_indices = 1, hdd_indices = 1;
for (uint8_t drive = 0x80; drive < 0xf0; drive++) { for (uint8_t drive = 0x80; drive < 0xf0; drive++) {
if (volume_index_i == MAX_VOLUMES) {
print("WARNING: TOO MANY VOLUMES!");
break;
}
struct rm_regs r = {0}; struct rm_regs r = {0};
struct bios_drive_params drive_params; struct bios_drive_params drive_params;
@ -278,6 +273,10 @@ void disk_create_index(void) {
block->guid_valid = true; block->guid_valid = true;
} }
if (volume_index_i == MAX_VOLUMES) {
print("WARNING: TOO MANY VOLUMES!");
return;
}
volume_index[volume_index_i++] = block; volume_index[volume_index_i++] = block;
for (int part = 0; ; part++) { for (int part = 0; ; part++) {
@ -289,6 +288,10 @@ void disk_create_index(void) {
if (ret == NO_PARTITION) if (ret == NO_PARTITION)
continue; continue;
if (volume_index_i == MAX_VOLUMES) {
print("WARNING: TOO MANY VOLUMES!");
return;
}
volume_index[volume_index_i++] = p; volume_index[volume_index_i++] = p;
block->max_partition++; block->max_partition++;
@ -577,11 +580,6 @@ fail:
size_t handle_count = handles_size / sizeof(EFI_HANDLE); size_t handle_count = handles_size / sizeof(EFI_HANDLE);
for (size_t i = 0; i < handle_count; i++) { for (size_t i = 0; i < handle_count; i++) {
if (volume_index_i == MAX_VOLUMES) {
print("WARNING: TOO MANY VOLUMES!");
break;
}
EFI_BLOCK_IO *drive = NULL; EFI_BLOCK_IO *drive = NULL;
status = gBS->HandleProtocol(handles[i], &block_io_guid, (void **)&drive); status = gBS->HandleProtocol(handles[i], &block_io_guid, (void **)&drive);
@ -632,6 +630,10 @@ fail:
block->guid_valid = true; block->guid_valid = true;
} }
if (volume_index_i == MAX_VOLUMES) {
print("WARNING: TOO MANY VOLUMES!");
return;
}
volume_index[volume_index_i++] = block; volume_index[volume_index_i++] = block;
for (int part = 0; ; part++) { for (int part = 0; ; part++) {
@ -646,6 +648,11 @@ fail:
struct volume *p = ext_mem_alloc(sizeof(struct volume)); struct volume *p = ext_mem_alloc(sizeof(struct volume));
memcpy(p, &_p, sizeof(struct volume)); memcpy(p, &_p, sizeof(struct volume));
if (volume_index_i == MAX_VOLUMES) {
print("WARNING: TOO MANY VOLUMES!");
return;
}
volume_index[volume_index_i++] = p; volume_index[volume_index_i++] = p;
block->max_partition++; block->max_partition++;