ARMv8 PAN 特性及其与 XOM 的冲突

前言 NetBSD 的 mmap(2) 手册 讲解 prot 入参的部分提到: Note that, due to hardware limitations, on some platforms PROT_WRITE may imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs should not rely on these flags being separately enforceable. 我们熟知的“权限分为 rwx,各用一个 bit 表示”只是一种理想的模型,实际硬件上不一定是这么实现的。 问题背景 ARMv8.1 …

SELinux:给文件单独打标签

需求:针对某个设备文件,阻止除特定进程以外的进程写入。 拿 /dev/tty20 做试验。实验环境:Fedora 38,x64 虚拟机。 给设备打标签,阻止普通写 创建 .te 策略文件之最最基础版: 1policy_module(tty20, 1.0.0) 2 3type tty20_t; 构建并加载策略模块: 1make -f /usr/share/selinux/devel/Makefile 2semodule -i tty20.pp 这里参考了这篇问答 。 尝试变更 /dev/tty20 的标签: 1chcon -t tty20_t /dev/tty20 大概率会因为缺少必要的权限而报错。 查看最近 AVC 类型的审计日志: …

ARM64 PAC 相关场景与代码流程

代码所在地 功能代码 arch/arm64/kernel/pointer_auth.c arch/arm64/include/asm/pointer_auth.h arch/arm64/include/asm/asm_pointer_auth.h(这个容易漏掉!) 测试代码 tools/testing/selftests/arm64/pauth/*,用户态测试 TEST(corrupt_pac):测试篡改带 PAC 的 LR 是否会导致验签失败从而令用户态进程收到信号 TEST(pac_instructions_not_nop{,_generic}):测试 pac* …

用户态进程:如何创建,如何销毁

如何创建 分为两个步骤: fork()/clone() 创建新内核线程 execve() 执行新用户态程序 新 forked 出来的线程如何开始工作 在 fork()/clone() 的过程中: 由 copy_process() 调用体系结构相关的 copy_thread() 来构造新线程的上下文; 由 wake_up_new_task() 将新线程的 task_struct 挂到某个 CPU 的 run queue 上,待调度器调度执行。 x86_64 1copy_thread(p, args) { 2 struct pt_regs *childregs = task_pt_regs(p); 3 struct fork_frame …

关于 SELinux 策略的各种操作

具体策略的查询 关于 SELinux 策略,我们时常要去了解:关于系统中的一个操作,为什么 SELinux 会允许/拒绝;其背后具体的规则是怎样的。此时我们可以使用 sesearch 来查询策略中具体的规则: 1# 探究【主体 A】对【客体 B】是否有【类型 C】的【权限 D】: 2# sesearch -A -s A -t B -c C -p D 3sesearch -A -s kernel_t -t unconfined_t -p setsched 4sesearch -A -s kernel_t -t unconfined_t -c key -p view 在查出对应的规则后,可以配合 seinfo 进一步了解规则中主、客体的 …