mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-23 03:31:06 +01:00
Add a BTI sysarch
This is used to enable the guard page when an elf binary is built with BTI instructions. Reviewed by: markj Sponsored by: Arm Ltd Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39453
This commit is contained in:
parent
d3eae160b2
commit
c4e4a7596b
@ -29,13 +29,54 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/sysproto.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
#include <vm/pmap.h>
|
||||
#include <vm/vm_map.h>
|
||||
|
||||
#include <machine/sysarch.h>
|
||||
#include <machine/vmparam.h>
|
||||
|
||||
int
|
||||
sysarch(struct thread *td, struct sysarch_args *uap)
|
||||
{
|
||||
struct arm64_guard_page_args gp_args;
|
||||
vm_offset_t eva;
|
||||
int error;
|
||||
|
||||
return (ENOTSUP);
|
||||
switch (uap->op) {
|
||||
case ARM64_GUARD_PAGE:
|
||||
error = copyin(uap->parms, &gp_args, sizeof(gp_args));
|
||||
if (error != 0)
|
||||
return (error);
|
||||
|
||||
/* Only accept canonical addresses, no PAC or TBI */
|
||||
if (!ADDR_IS_CANONICAL(gp_args.addr))
|
||||
return (EINVAL);
|
||||
|
||||
eva = gp_args.addr + gp_args.len;
|
||||
|
||||
/* Check for a length overflow */
|
||||
if (gp_args.addr > eva)
|
||||
return (EINVAL);
|
||||
|
||||
/* Check in the correct address space */
|
||||
if (eva >= VM_MAX_USER_ADDRESS)
|
||||
return (EINVAL);
|
||||
|
||||
/* Nothing to do */
|
||||
if (gp_args.len == 0)
|
||||
return (0);
|
||||
|
||||
error = pmap_bti_set(vmspace_pmap(td->td_proc->p_vmspace),
|
||||
trunc_page(gp_args.addr), round_page(eva));
|
||||
break;
|
||||
default:
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
@ -39,6 +39,13 @@
|
||||
#ifndef _MACHINE_SYSARCH_H_
|
||||
#define _MACHINE_SYSARCH_H_
|
||||
|
||||
#define ARM64_GUARD_PAGE 0x100
|
||||
|
||||
struct arm64_guard_page_args {
|
||||
__uintptr_t addr;
|
||||
__size_t len;
|
||||
};
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
Loading…
Reference in New Issue
Block a user