Spinlock 代码及故障模型分析

代码流程 spinlock 上锁的代码流程: 1# include/linux/spinlock.h 2spin_lock 3 raw_spin_lock 4 # ifdef CONFIG_INLINE_SPIN_LOCK 5 # include/linux/spinlock_api_smp.h 6 # else 7 # kernel/locking/spinlock.c 8 _raw_spin_lock 9 # include/linux/spinlock_api_smp.h 10 __raw_spin_lock 11 preempt_disable() 12 spin_acquire(...) 可见,上锁时 spinlock 是 …

Linux 脚本执行:由一个补丁分析说起

事情背景 补丁链接:a4ae32c71fe9 (“exec: Always set cap_ambient in cap_bprm_set_creds”) 补丁信息中提到,该补丁是为了确保 cap_bprm_set_creds() 每次都会设置 cap_ambient 变量。另外还提到了下述内容: … if there is a suid or sgid script with an interpreter that has neither the suid nor the sgid bits set the interpreter should be able to accept …

进程切换与抢占

进程切换 概念 进程切换,又称上下文切换,分为 自愿(voluntary)切换:进程本身无法继续运行 例如需要等待 IO 完成(TASK_UNINTERRUPTABLE),或等待某个资源或事件的就绪(TASK_INTERRUPTIBLE),或正在被 debug/trace(TASK_STOPPED/TASK_TRACED) 强制(involuntary)切换:进程还可以运行,但内核不让它运行了 例如进程时间片用尽,或有优先级更高的其他进程 又例如进程自己决定主动让出 CPU(注意:这不属于自愿切换,因为进程仍处于 TASK_RUNNING 状态) 用户态程序通过 sched_yield …

关于一个神奇的 Linux 目录权限问题的探究

TL;DR su 与单纯的 set{u,g}id 不一样:前者会通过 setgroups 系统调用来设置进程的 Supplementary Group1;而后者不会,只会修改进程的 {,s,e,fs}{u,g}id。 Supplementary Group 在内核中体现为 struct cred 下的 group_info,本质上是一个长度不固定的 gid 数组(类似 C++ 中的 string_view) 通过内核代码(init_cred 和 init_groups)确认,内核不会为进程添加 Supplementary Group;且 /etc/group 中也没有对应的条目,但 root 用户进程的 Supplementary …

基于 Jenkins 搭建针对内核的 CI

背景简述 目标内核分支:4.4、4.18、4.19、5.10 根文件系统:最后一版非 Stream 的 CentOS 8 架构概述: 制作一份统一的原始 rootfs 镜像; 为每个内核版本各自设立一个 Job,各自拷贝一份原始 rootfs 运行 VM,随后在 VM 内执行编译内核、安装内核、运行测试套以及其他特定内核版本所需的动作。 Jenkins 配置手册 使用清华开源镜像站 。 Jenkins 有普通版(每周一更)和 LTS 版(每 12 周一更),安装包(以 Ubuntu 为例)在清华源上分别保存在 debian/ 和 debian-stable/ 上。下载下来直接安装即可,不用配 apt 啥的,主要是网络代理太麻烦。 安 …