mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-08 20:05:54 +00:00
NOVA: support to restrict memory rwx bits in core
This commit is contained in:
parent
4d12464cee
commit
b8ab3673cd
@ -35,10 +35,12 @@ namespace Genode {
|
||||
*
|
||||
* \return true on success
|
||||
*/
|
||||
inline bool map_local(addr_t from_phys, addr_t to_virt, size_t num_pages)
|
||||
inline bool map_local(addr_t from_phys, addr_t to_virt, size_t num_pages,
|
||||
bool read = true, bool write = true, bool exec = true)
|
||||
{
|
||||
return (::map_local((Nova::Utcb *)Thread_base::myself()->utcb(),
|
||||
from_phys, to_virt, num_pages, true) == 0);
|
||||
from_phys, to_virt, num_pages,
|
||||
Nova::Rights(read, write, exec), true) == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -94,6 +94,7 @@ map_local_one_to_one(Nova::Utcb *utcb, Nova::Crd crd) {
|
||||
inline int map_local(Nova::Utcb *utcb,
|
||||
Genode::addr_t from_start, Genode::addr_t to_start,
|
||||
Genode::size_t num_pages,
|
||||
Nova::Rights const &permission,
|
||||
bool kern_pd = false)
|
||||
{
|
||||
if (verbose_local_map)
|
||||
@ -102,7 +103,6 @@ inline int map_local(Nova::Utcb *utcb,
|
||||
|
||||
using namespace Nova;
|
||||
using namespace Genode;
|
||||
Rights const rwx(true, true, true);
|
||||
|
||||
size_t const size = num_pages << get_page_size_log2();
|
||||
|
||||
@ -144,8 +144,8 @@ inline int map_local(Nova::Utcb *utcb,
|
||||
order, from_curr, from_end, to_curr, to_end);
|
||||
|
||||
int const res = map_local(utcb,
|
||||
Mem_crd((from_curr >> 12), order - get_page_size_log2(), rwx),
|
||||
Mem_crd((to_curr >> 12), order - get_page_size_log2(), rwx),
|
||||
Mem_crd((from_curr >> 12), order - get_page_size_log2(), permission),
|
||||
Mem_crd((to_curr >> 12), order - get_page_size_log2(), permission),
|
||||
kern_pd);
|
||||
if (res) return res;
|
||||
|
||||
|
@ -51,9 +51,10 @@ addr_t Io_mem_session_component::_map_local(addr_t base, size_t size)
|
||||
}
|
||||
|
||||
/* map the dataspace's physical pages to local addresses */
|
||||
const Nova::Rights rights(true, true, true);
|
||||
map_local((Nova::Utcb *)Thread_base::myself()->utcb(),
|
||||
base, (addr_t)virt_addr,
|
||||
page_rounded_size >> get_page_size_log2(), true);
|
||||
page_rounded_size >> get_page_size_log2(), rights, true);
|
||||
|
||||
return (addr_t)virt_addr;
|
||||
}
|
||||
|
@ -385,7 +385,8 @@ Platform::Platform() :
|
||||
PERR("could not locally map multi-boot module");
|
||||
|
||||
int res = map_local(__main_thread_utcb, mem_desc->addr, (addr_t)core_local_addr,
|
||||
round_page(mem_desc->size) >> get_page_size_log2(), true);
|
||||
round_page(mem_desc->size) >> get_page_size_log2(),
|
||||
Nova::Rights(true, true, true), true);
|
||||
if (res)
|
||||
PERR("map_local failed res=%d", res);
|
||||
|
||||
@ -413,7 +414,7 @@ Platform::Platform() :
|
||||
|
||||
/* remap main utcb to default utbc address */
|
||||
if (map_local(__main_thread_utcb, (addr_t)__main_thread_utcb,
|
||||
(addr_t)main_thread_utcb(), 1)) {
|
||||
(addr_t)main_thread_utcb(), 1, Nova::Rights(true, true, true))) {
|
||||
PERR("could not remap main threads utcb");
|
||||
nova_die();
|
||||
}
|
||||
@ -435,7 +436,8 @@ bool Core_mem_allocator::Mapped_mem_allocator::_map_local(addr_t virt_addr,
|
||||
unsigned size_log2)
|
||||
{
|
||||
map_local((Utcb *)Thread_base::myself()->utcb(), phys_addr,
|
||||
virt_addr, 1 << (size_log2 - get_page_size_log2()), true);
|
||||
virt_addr, 1 << (size_log2 - get_page_size_log2()),
|
||||
Rights(true, true, true), true);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -67,9 +67,10 @@ void Ram_session_component::_clear_ds(Dataspace_component *ds)
|
||||
page_rounded_size, ds->phys_addr(), virt_addr);
|
||||
|
||||
/* map the dataspace's physical pages to local addresses */
|
||||
const Nova::Rights rights(true, true, true);
|
||||
map_local((Nova::Utcb *)Thread_base::myself()->utcb(),
|
||||
ds->phys_addr(), (addr_t)virt_addr,
|
||||
page_rounded_size >> get_page_size_log2(), true);
|
||||
page_rounded_size >> get_page_size_log2(), rights, true);
|
||||
|
||||
memset(virt_addr, 0, page_rounded_size);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user