starnix_uapi/
personality.rs1use crate::uapi;
6use bitflags::bitflags;
7
8bitflags! {
9 #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
10 pub struct PersonalityFlags: u32 {
11 const UNAME26 = uapi::UNAME26;
12 const ADDR_NO_RANDOMIZE = uapi::ADDR_NO_RANDOMIZE;
13 const FDPIC_FUNCPTRS = uapi::FDPIC_FUNCPTRS;
14 const MMAP_PAGE_ZERO = uapi::MMAP_PAGE_ZERO;
15 const ADDR_COMPAT_LAYOUT = uapi::ADDR_COMPAT_LAYOUT;
16 const READ_IMPLIES_EXEC = uapi::READ_IMPLIES_EXEC;
17 const ADDR_LIMIT_32BIT = uapi::ADDR_LIMIT_32BIT;
18 const SHORT_INODE = uapi::SHORT_INODE;
19 const WHOLE_SECONDS = uapi::WHOLE_SECONDS;
20 const STICKY_TIMEOUTS = uapi::STICKY_TIMEOUTS;
21 const ADDR_LIMIT_3GB = uapi::ADDR_LIMIT_3GB;
22 }
23}
24
25impl PersonalityFlags {
26 pub fn execution_domain(&self) -> u32 {
28 self.bits() & (uapi::PER_MASK as u32)
29 }
30
31 pub fn update_from_syscall(&mut self, value: u32) -> u32 {
35 let prev = self.bits();
36 if value != 0xffffffff {
37 *self = PersonalityFlags::from_bits_retain(value);
39 }
40 prev
41 }
42}