xref: /minix/sys/sys/pax.h (revision 0a6a1f1d)
1 /* $NetBSD: pax.h,v 1.16 2015/09/26 16:12:24 maxv Exp $ */
2 
3 /*-
4  * Copyright (c) 2006 Elad Efrat <elad@NetBSD.org>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. The name of the author may not be used to endorse or promote products
16  *    derived from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef _SYS_PAX_H_
31 #define _SYS_PAX_H_
32 
33 #include <uvm/uvm_extern.h>
34 
35 #define P_PAX_ASLR	0x01	/* Enable ASLR */
36 #define P_PAX_MPROTECT	0x02	/* Enable Mprotect */
37 #define P_PAX_GUARD	0x04	/* Enable Segvguard */
38 
39 struct lwp;
40 struct exec_package;
41 struct vmspace;
42 
43 #ifdef PAX_ASLR
44 /*
45  * We stick this here because we need it in kern/exec_elf.c for now.
46  */
47 #ifndef PAX_ASLR_DELTA_EXEC_LEN
48 #define	PAX_ASLR_DELTA_EXEC_LEN	12
49 #endif
50 #endif /* PAX_ASLR */
51 
52 void pax_init(void);
53 void pax_setup_elf_flags(struct exec_package *, uint32_t);
54 void pax_mprotect(struct lwp *, vm_prot_t *, vm_prot_t *);
55 int pax_segvguard(struct lwp *, struct vnode *, const char *, bool);
56 
57 #define	PAX_ASLR_DELTA(delta, lsb, len)	\
58     (((delta) & ((1UL << (len)) - 1)) << (lsb))
59 
60 bool pax_aslr_epp_active(struct exec_package *);
61 bool pax_aslr_active(struct lwp *);
62 void pax_aslr_init_vm(struct lwp *, struct vmspace *);
63 void pax_aslr_stack(struct exec_package *, u_long *);
64 void pax_aslr_mmap(struct lwp *, vaddr_t *, vaddr_t, int);
65 
66 #endif /* !_SYS_PAX_H_ */
67