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 …

利用云服务器建立个人博客网站

背景 所谓“云服务器”,就是运行在云上的一个虚拟机,可供用户远程连接后像一台普通 PC 那样去使用。有意思的是,之前不去了解还不知道:其实就是这么个玩意儿,现国内几大厂商提供这类产品时,起的名字都不一样:华为云的叫 Elastic Cloud Server(ECS) ;腾讯云的称 Cloud Virtual Machine(CVM) 或 Lighthouse ;而阿里云则是 Elastic Compute Service(也是 ECS) 。看着唬人,实际上都一回事。 一开始我的个人博客是借助 Gitee Page 服务搭建的。后来使用该服务需要提供的个人信息也越来越多,包括身份证照片和本人手持身份证照片这种敏感信息。我心想,这要求跟 …