草庐IT

linux - seccomp-bpf 如何过滤系统调用?

我正在研究seccomp-bpf的实现细节,这是从3.5版开始引入Linux的系统调用过滤机制。我从Linux3.10查看了kernel/seccomp.c的源代码,想问一些关于它的问题。从seccomp.c来​​看,seccomp_run_filters()似乎是从__secure_computing()调用的,以测试当前进程调用的系统调用。但是查看seccomp_run_filters(),作为参数传递的系统调用编号并未在任何地方使用。看起来sk_run_filter()是BPF过滤器机器的实现,但是sk_run_filter()是从seccomp_run_filters()调用的

linux - 是否有必要在 softirq 上下文中调用 rcu_read_lock

rcu_read_lock的实现是disablepreempt和barrier。软中断上下文不会被抢占。那么是否有必要在softirq上下文中调用rcu_read_lock。屏障重要吗? 最佳答案 是的,有必要使用rcu_read_lock访问受rcu保护的指针,即使在softirq上下文中也是如此。正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得它没有损坏的风险,即使您不使用rcu_read_lock。但是,这不是rcuapi的保证,只是因为具体实现的“hack”。这个hack可

linux - 是否有必要在 softirq 上下文中调用 rcu_read_lock

rcu_read_lock的实现是disablepreempt和barrier。软中断上下文不会被抢占。那么是否有必要在softirq上下文中调用rcu_read_lock。屏障重要吗? 最佳答案 是的,有必要使用rcu_read_lock访问受rcu保护的指针,即使在softirq上下文中也是如此。正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得它没有损坏的风险,即使您不使用rcu_read_lock。但是,这不是rcuapi的保证,只是因为具体实现的“hack”。这个hack可

linux - 如何在 Linux 内核级别限制特权用户访问?

我在learningLinuxKernelProgramming上找到了这个答案我的问题更具体地针对Linux内核的安全功能。我想知道如何限制特权用户或进程对其他进程和文件的访问权限,而不是root的完全访问权限。到目前为止我发现:user和group用于自主访问控制(DAC),区分用户、组和其他用户的读取、写入和执行用户root用于更高权限的任务setuid和setgid用于扩展用户的DAC并设置调用进程的组/用户ID,例如用户以root权限运行ping以打开Linux套接字能力细粒度权限,例如删除ping的suid位并设置cap_net_raw控制组(Cgroups)以限制对资源的

linux - 如何在 Linux 内核级别限制特权用户访问?

我在learningLinuxKernelProgramming上找到了这个答案我的问题更具体地针对Linux内核的安全功能。我想知道如何限制特权用户或进程对其他进程和文件的访问权限,而不是root的完全访问权限。到目前为止我发现:user和group用于自主访问控制(DAC),区分用户、组和其他用户的读取、写入和执行用户root用于更高权限的任务setuid和setgid用于扩展用户的DAC并设置调用进程的组/用户ID,例如用户以root权限运行ping以打开Linux套接字能力细粒度权限,例如删除ping的suid位并设置cap_net_raw控制组(Cgroups)以限制对资源的

c - 为什么我对虚拟内存的写入在虚拟设备驱动程序中不可见?

我有一个我编写的自定义驱动程序,旨在促进将精确的硬件ram内存地址自定义映射到用户空间。我正在尝试测试在两个进程之间共享到同一硬件地址的公共(public)内存mmap促进了每一方都可以看到的可见内存操作。我的代码大概是这样的://placement:inammapcallbacktoafile_operationsfacilitated//characterdevice//phys_addr-avariablethatIwillioremapforavirtualaddrvirtaddr=ioremap(phys_addr,size);if(!virtaddr){printk(KER

c - 为什么我对虚拟内存的写入在虚拟设备驱动程序中不可见?

我有一个我编写的自定义驱动程序,旨在促进将精确的硬件ram内存地址自定义映射到用户空间。我正在尝试测试在两个进程之间共享到同一硬件地址的公共(public)内存mmap促进了每一方都可以看到的可见内存操作。我的代码大概是这样的://placement:inammapcallbacktoafile_operationsfacilitated//characterdevice//phys_addr-avariablethatIwillioremapforavirtualaddrvirtaddr=ioremap(phys_addr,size);if(!virtaddr){printk(KER

linux - QEMU:/bin/sh: 无法访问 tty;作业控制关闭

作为linux内核的开发环境,我使用qemu并设置了initramfs,类似于所示here,几乎没有额外的可执行文件。基本上,它使用busybox创建最小环境并使用cpio将其打包。init的内容如下所示。$catinitmount-tprocnone/procmount-tsysfsnone/sysecho-e"\nBoottook$(cut-d''-f1/proc/uptime)seconds\n"exec/bin/sh使用以下命令启动虚拟机:qemu-system-x86_64-kernelbzImage-initrdinitramfs-append"console=ttyS0"

linux - QEMU:/bin/sh: 无法访问 tty;作业控制关闭

作为linux内核的开发环境,我使用qemu并设置了initramfs,类似于所示here,几乎没有额外的可执行文件。基本上,它使用busybox创建最小环境并使用cpio将其打包。init的内容如下所示。$catinitmount-tprocnone/procmount-tsysfsnone/sysecho-e"\nBoottook$(cut-d''-f1/proc/uptime)seconds\n"exec/bin/sh使用以下命令启动虚拟机:qemu-system-x86_64-kernelbzImage-initrdinitramfs-append"console=ttyS0"

linux - 原始套接字与 TUN 设备

将IP数据包(从用户空间)发送到tun设备和使用原始套接字有什么区别?为了通过用户空间传输IP数据包。为什么我会使用一种方法而不是另一种方法?原始套接字:s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);send(s,ip_pkt,len,0);调整设备:structifreqifr;fd=open("/dev/net/tun",O_RDWR);ifr.ifr_flags=IFF_TUN;ioctl(fd,TUNSETIFF,(void*)&ifr)send(s,ip_pkt,len,0); 最佳答案 T