mirror of
https://github.com/sgmarz/osblog.git
synced 2024-11-24 02:16:19 +04:00
Check and use permission bits in ELF for user pages.
This commit is contained in:
parent
fa1a728bd9
commit
42c14bf930
@ -47,9 +47,9 @@ pub struct ProgramHeader {
|
|||||||
|
|
||||||
pub const TYPE_EXEC: u16 = 2;
|
pub const TYPE_EXEC: u16 = 2;
|
||||||
|
|
||||||
pub const PROG_READ: u8 = 4;
|
pub const PROG_READ: u32 = 4;
|
||||||
pub const PROG_WRITE: u8 = 2;
|
pub const PROG_WRITE: u32 = 2;
|
||||||
pub const PROG_EXECUTE: u8 = 1;
|
pub const PROG_EXECUTE: u32 = 1;
|
||||||
|
|
||||||
pub const MACHINE_RISCV: u16 = 0xf3;
|
pub const MACHINE_RISCV: u16 = 0xf3;
|
||||||
pub const PH_SEG_TYPE_NULL: u32 = 0;
|
pub const PH_SEG_TYPE_NULL: u32 = 0;
|
||||||
|
@ -222,6 +222,18 @@ pub fn test_elf() {
|
|||||||
}
|
}
|
||||||
memcpy(ptr.add(ph.off), buffer.get().add(ph.off), ph.memsz);
|
memcpy(ptr.add(ph.off), buffer.get().add(ph.off), ph.memsz);
|
||||||
let pages = ph.memsz / PAGE_SIZE + 1;
|
let pages = ph.memsz / PAGE_SIZE + 1;
|
||||||
|
let mut bits = EntryBits::User.val();
|
||||||
|
// This sucks, but we check each bit in the flags to see if
|
||||||
|
// we need to add it to the PH permissions.
|
||||||
|
if ph.flags & elf::PROG_EXECUTE != 0 {
|
||||||
|
bits |= EntryBits::Execute.val();
|
||||||
|
}
|
||||||
|
if ph.flags & elf::PROG_READ != 0 {
|
||||||
|
bits |= EntryBits::Read.val();
|
||||||
|
}
|
||||||
|
if ph.flags & elf::PROG_WRITE != 0 {
|
||||||
|
bits |= EntryBits::Write.val();
|
||||||
|
}
|
||||||
for i in 0..pages {
|
for i in 0..pages {
|
||||||
let vaddr = ph.vaddr + i * PAGE_SIZE;
|
let vaddr = ph.vaddr + i * PAGE_SIZE;
|
||||||
let paddr = ptr as usize + i * PAGE_SIZE;
|
let paddr = ptr as usize + i * PAGE_SIZE;
|
||||||
@ -229,7 +241,7 @@ pub fn test_elf() {
|
|||||||
table,
|
table,
|
||||||
vaddr,
|
vaddr,
|
||||||
paddr,
|
paddr,
|
||||||
EntryBits::UserReadExecute.val(),
|
bits,
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user