don't leave parts of the bootloader in the kernel's address space
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Refatoração
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- rust
- Domínio
- operating-systems
Direção de pesquisa
Comece lendo src/binary/level_4_entries.rs ao redor da reserva dos primeiros 512GiB e src/binary/mod.rs ao redor da troca de contexto e dos mapeamentos de GDT. Rastreie como a tabela de páginas do kernel e Mappings são construídos; considera-se concluído quando as partes do bootloader não forem mais deixadas no espaço de endereços do kernel, o mapeamento temporário da troca de contexto for tratado e a localização de GDT for exposta ou configurável.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
While implementing finer granular ASLR I came across this comment:
https://github.com/rust-osdev/bootloader/blob/ac46d0455b41c11e5d316348d068df1c495ce0af/src/binary/level_4_entries.rs#L40
We mark the first 512GiB of the address space as unusable for dynamically generated addresses. I think we do this because we identity map the context switch code into kernel memory and this code most likely resides within the first 512GiB of the address space:
https://github.com/rust-osdev/bootloader/blob/a445433010960ec5d8a8b94a85fcac16a00489b5/src/binary/mod.rs#L166-L181
This causes a number of (admittedly small and unlikely) problems:
- The identity mapped pages could overlap with the kernel or other mappings
- We don't expose the identity mapped addresses to the kernel in
Mappings - An attacker could make use of the identity mapped pages to defeat ASLR
- We mark so a lot of usable memory as unusable and because of that we can't check for overlaps because there would be a lot of false positives. We currently just ignore overlaps.
We could probably work around those problems while still mapping parts of the bootloader into the kernel's address space, but I'd like to propose another solution: We use another very short lived page table to do the context switch. This page table would only map a few pages containing code that switches to the kernel's page table. Importantly, we would set the page table up in such a way that the kernel's entrypoint is just after the page table switch instruction, so we don't have to use any code to jump to the kernel, it would simply be the next instruction.
I don't think we could reliably map such code into the bootloader's address space because we'd have to map the code just before the kernel's entrypoint which could be close to bootloader's code, so that's why I want to use a short-lived page table.
We also identity map a GDT into the kernel's address space:
https://github.com/rust-osdev/bootloader/blob/a445433010960ec5d8a8b94a85fcac16a00489b5/src/binary/mod.rs#L183-L193
We should probably make the GDT's location configurable and expose it in Mappings.
I'd be happy to work on a pr for this.
- Linguagem predominante
- Rust
- Estrelas
- 1.7k
- Forks
- 240
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de rust-osdev/bootloader
-
help wanted
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 67/100
rust-osdev/bootloader#581 · 2 comentários ·
-
No boot on real hardware Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
rust-osdev/bootloader#573 · 5 comentários ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
rust-osdev/bootloader#555 · 2 comentários ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 30/100
rust-osdev/bootloader#534 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 38/100
rust-osdev/bootloader#525 ·
Todas as issues de rust-osdev/bootloader
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
nautechsystems/nautilus_trader#5095 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
stellar/rs-soroban-env#1739 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
-
bug good first issue package: quic
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100