mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 08:41:15 +00:00
Kernel/aarch64: Set Access Permission EL0 bit for userspace mappings
This bit was not set, which was causing Permission Faults when executing in userspace.
This commit is contained in:
parent
187723776a
commit
163e3ac90b
Notes:
sideshowbarker
2024-07-17 03:16:02 +09:00
Author: https://github.com/FireFox317 Commit: https://github.com/SerenityOS/serenity/commit/163e3ac90b Pull-request: https://github.com/SerenityOS/serenity/pull/17249 Reviewed-by: https://github.com/linusg Reviewed-by: https://github.com/nico ✅ Reviewed-by: https://github.com/supercomputer7
|
@ -40,10 +40,8 @@ constexpr u32 INNER_SHAREABLE = (3 << 8);
|
|||
constexpr u32 NORMAL_MEMORY = (0 << 2);
|
||||
constexpr u32 DEVICE_MEMORY = (1 << 2);
|
||||
|
||||
constexpr u32 ACCESS_PERMISSION_READWRITE = (0b00 << 6);
|
||||
constexpr u32 ACCESS_PERMISSION_READWRITE_EL0 = (0b01 << 6);
|
||||
constexpr u32 ACCESS_PERMISSION_READONLY = (0b10 << 6);
|
||||
constexpr u32 ACCESS_PERMISSION_READONLY_EL0 = (0b11 << 6);
|
||||
constexpr u32 ACCESS_PERMISSION_EL0 = (1 << 6);
|
||||
constexpr u32 ACCESS_PERMISSION_READONLY = (1 << 7);
|
||||
|
||||
// Figure D5-15 of Arm Architecture Reference Manual Armv8 - page D5-2588
|
||||
class PageDirectoryEntry {
|
||||
|
@ -127,8 +125,8 @@ public:
|
|||
bool is_present() const { return (raw() & Present) == Present; }
|
||||
void set_present(bool b) { set_bit(Present, b); }
|
||||
|
||||
bool is_user_allowed() const { TODO_AARCH64(); }
|
||||
void set_user_allowed(bool) { }
|
||||
bool is_user_allowed() const { return (raw() & ACCESS_PERMISSION_EL0) == ACCESS_PERMISSION_EL0; }
|
||||
void set_user_allowed(bool b) { set_bit(ACCESS_PERMISSION_EL0, b); }
|
||||
|
||||
bool is_writable() const { return !((raw() & ACCESS_PERMISSION_READONLY) == ACCESS_PERMISSION_READONLY); }
|
||||
void set_writable(bool b) { set_bit(ACCESS_PERMISSION_READONLY, !b); }
|
||||
|
|
Loading…
Reference in a new issue