Skip to content

Commit

Permalink
ARM: Map the initial thread's IPC buffer and boot info as non-executa…
Browse files Browse the repository at this point in the history
…ble.

Note that this also required some irrelevant x86 changes to match function
arguments.
  • Loading branch information
Matthew Fernandez authored and AdrianDanis committed Mar 9, 2015
1 parent 86751e4 commit 4f12acd
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 11 deletions.
2 changes: 1 addition & 1 deletion include/arch/arm/arch/kernel/boot.h
Expand Up @@ -14,7 +14,7 @@
#include <types.h>

cap_t create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large);
cap_t create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large);
cap_t create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large, bool_t executable);

void init_kernel(
paddr_t ui_p_reg_start,
Expand Down
2 changes: 1 addition & 1 deletion include/arch/arm/arch/kernel/vspace.h
Expand Up @@ -18,7 +18,7 @@
#define IT_ASID 1 /* initial thread's ASID */

void map_it_pt_cap(cap_t pd_cap, cap_t pt_cap);
void map_it_frame_cap(cap_t pd_cap, cap_t frame_cap);
void map_it_frame_cap(cap_t pd_cap, cap_t frame_cap, bool_t executable);
void map_kernel_window(void);
void map_kernel_frame(paddr_t paddr, pptr_t vaddr, vm_rights_t vm_rights, vm_attributes_t vm_attributes);
void activate_global_pd(void);
Expand Down
2 changes: 1 addition & 1 deletion include/arch/ia32/arch/kernel/boot.h
Expand Up @@ -26,7 +26,7 @@ typedef struct ui_info {
} ui_info_t;

cap_t create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large);
cap_t create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large);
cap_t create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large, bool_t executable);

bool_t init_node_state(
p_region_t avail_p_reg,
Expand Down
4 changes: 2 additions & 2 deletions src/arch/arm/kernel/boot.c
Expand Up @@ -169,10 +169,10 @@ create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large)
}

BOOT_CODE cap_t
create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large)
create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large, bool_t executable)
{
cap_t cap = create_it_frame_cap(pptr, vptr, asid, use_large);
map_it_frame_cap(pd_cap, cap);
map_it_frame_cap(pd_cap, cap, executable);
return cap;
}

Expand Down
4 changes: 2 additions & 2 deletions src/arch/arm/kernel/vspace.c
Expand Up @@ -108,7 +108,7 @@ map_it_pt_cap(cap_t pd_cap, cap_t pt_cap)
}

BOOT_CODE void
map_it_frame_cap(cap_t pd_cap, cap_t frame_cap)
map_it_frame_cap(cap_t pd_cap, cap_t frame_cap, bool_t executable)
{
pte_t* pt;
pte_t* targetSlot;
Expand All @@ -131,7 +131,7 @@ map_it_frame_cap(cap_t pd_cap, cap_t frame_cap)
APFromVMRights(VMReadWrite),
1, /* cacheable */
1, /* write-back caching */
0 /* executable */
!executable
);
}

Expand Down
3 changes: 2 additions & 1 deletion src/arch/ia32/kernel/boot.c
Expand Up @@ -21,6 +21,7 @@
#include <arch/machine/fpu.h>
#include <arch/object/ioport.h>
#include <arch/linker.h>
#include <util.h>

#ifdef CONFIG_IOMMU
#include <plat/machine/intel-vtd.h>
Expand Down Expand Up @@ -95,7 +96,7 @@ create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large)
}

BOOT_CODE cap_t
create_mapped_it_frame_cap(cap_t vspace_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large)
create_mapped_it_frame_cap(cap_t vspace_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large, bool_t executable UNUSED)
{
cap_t cap = create_it_frame_cap(pptr, vptr, asid, use_large);
map_it_frame_cap(vspace_cap, cap);
Expand Down
6 changes: 3 additions & 3 deletions src/kernel/boot.c
Expand Up @@ -218,7 +218,7 @@ create_ipcbuf_frame(cap_t root_cnode_cap, cap_t pd_cap, vptr_t vptr)
clearMemory((void*)pptr, PAGE_BITS);

/* create a cap of it and write it into the root CNode */
cap = create_mapped_it_frame_cap(pd_cap, pptr, vptr, IT_ASID, false);
cap = create_mapped_it_frame_cap(pd_cap, pptr, vptr, IT_ASID, false, false);
write_slot(SLOT_PTR(pptr_of_cap(root_cnode_cap), BI_CAP_IT_IPCBUF), cap);

return cap;
Expand All @@ -235,7 +235,7 @@ create_bi_frame_cap(
cap_t cap;

/* create a cap of it and write it into the root CNode */
cap = create_mapped_it_frame_cap(pd_cap, pptr, vptr, IT_ASID, false);
cap = create_mapped_it_frame_cap(pd_cap, pptr, vptr, IT_ASID, false, false);
write_slot(SLOT_PTR(pptr_of_cap(root_cnode_cap), BI_CAP_BI_FRAME), cap);
}

Expand Down Expand Up @@ -300,7 +300,7 @@ create_frames_of_region(

for (f = reg.start; f < reg.end; f += BIT(PAGE_BITS)) {
if (do_map) {
frame_cap = create_mapped_it_frame_cap(pd_cap, f, f - BASE_OFFSET - pv_offset, IT_ASID, false);
frame_cap = create_mapped_it_frame_cap(pd_cap, f, f - BASE_OFFSET - pv_offset, IT_ASID, false, true);
} else {
frame_cap = create_unmapped_it_frame_cap(f, false);
}
Expand Down

0 comments on commit 4f12acd

Please sign in to comment.