当前位置: 首页 > article >正文

linux kernel CONFIG_KCMP解析

CONFIG_KCMP是 Linux 内核 5.12 新增的独立开关用于启用kcmp () 系统调用核心作用是让用户态安全地比对两个进程是否共享内核资源FD、内存、信号等典型用于容器 / CRIU 热迁移、调试与安全审计。下面从配置、系统调用、源码、应用场景、依赖与默认配置几方面详细说明。一、配置项基本信息Kconfig路径init/Kconfigconfig KCMP bool Enable kcmp() system call depends on EXPERT help Enable the kernel resource comparison system call. It provides user-space with the ability to compare two processes to see if they share a common resource, such as a file descriptor or even virtual memory space. If unsure, say N.类型booly/n不可编译为模块依赖CONFIG_EXPERTy需开启专家模式才可见引入版本Linux 5.12此前 kcmp () 仅随CONFIG_CHECKPOINT_RESTORE启用主流发行版默认y如 Ubuntu、CentOS、Debian极简内核默认n二、kcmp () 系统调用详解1. 函数原型#include linux/kcmp.h // 无 glibc 封装需用 syscall 直接调用 int syscall(SYS_kcmp, pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2);功能比较pid1与pid2的指定资源是否指向同一内核对象权限需对两个进程有PTRACE_MODE_READ_REALCREDS权限类似 ptrace 读权限2. 比对类型type 参数表格类型作用KCMP_FILE比较idx1pid1 的 FD与idx2pid2 的 FD是否指向同一打开文件KCMP_VM比较两进程是否共享虚拟内存如 clone (CLONE_VM) 创建的线程KCMP_FILES比较两进程是否共享文件描述符表如 clone (CLONE_FILES)KCMP_FS比较两进程是否共享文件系统信息根目录、umask 等KCMP_SIGHAND比较两进程是否共享信号处理表KCMP_IO比较两进程是否共享 I/O 上下文KCMP_SYSVSEM比较两进程是否共享 System V 信号量3. 返回值0两个资源完全相同指向同一内核对象1资源类型相同但对象不同2资源类型不同负数错误如-ESRCH进程不存在-EPERM权限不足三、核心源码流程5.121. 系统调用注册kernel/syscall.c// 5.12 独立注册不再依赖 CHECKPOINT_RESTORE SYSCALL_DEFINE6(kcmp, pid_t, pid1, pid_t, pid2, int, type, unsigned long, idx1, unsigned long, idx2) { // 权限检查对 pid1/pid2 执行 ptrace 读权限校验 if (!ptrace_may_access(pid1, PTRACE_MODE_READ_REALCREDS) || !ptrace_may_access(pid2, PTRACE_MODE_READ_REALCREDS)) return -EPERM; // 根据 type 分发到不同资源比对函数 switch (type) { case KCMP_FILE: return kcmp_file(pid1, pid2, idx1, idx2); case KCMP_VM: return kcmp_vm(pid1, pid2); // ... 其他类型处理 default: return -EINVAL; } }2. 示例kcmp_file比对逻辑static int kcmp_file(pid_t pid1, pid_t pid2, unsigned long fd1, unsigned long fd2) { struct file *f1, *f2; struct task_struct *p1, *p2; // 获取进程结构体 p1 find_task_by_vpid(pid1); p2 find_task_by_vpid(pid2); if (!p1 || !p2) return -ESRCH; // 从 FD 表中取出 file 对象 f1 fget(p1, fd1); f2 fget(p2, fd2); if (!f1 || !f2) return -EBADF; // 比较 file 对象地址同一内核对象则地址相同 int res (f1 f2) ? 0 : 1; fput(f1); fput(f2); return res; }核心通过内核对象地址比对判断资源是否共享安全高效无需暴露敏感 proc 信息四、关键应用场景CRIUCheckpoint/Restore In Userspace容器 / 进程热迁移迁移前比对进程资源共享关系确保快照一致性依赖CONFIG_KCMPy或CONFIG_CHECKPOINT_RESTOREy容器运行时Docker/containerd验证容器内进程是否共享命名空间 / 资源如判断是否为同一容器的线程调试与排障排查进程间 FD 泄漏快速定位两个进程是否持有同一文件 / 套接字示例kcmp(1234, 5678, KCMP_FILE, 3, 3)检查 1234 的 FD3 与 5678 的 FD3 是否相同安全审计监控进程资源共享异常如恶意进程共享敏感 FD五、依赖与关联配置强依赖CONFIG_EXPERTyKconfig 依赖历史关联5.12 前kcmp()仅由CONFIG_CHECKPOINT_RESTORE启用5.12 独立为CONFIG_KCMP同时保留与CHECKPOINT_RESTORE的兼容无模块选项bool类型只能内置y或关闭n六、开启 / 关闭的影响开启CONFIG_KCMPy优点支持 CRIU、容器调试、资源比对工具主流发行版默认开启兼容性好缺点内核代码微小增加约 1KB无性能损耗关闭CONFIG_KCMPn优点极小节省内核内存可忽略缺点kcmp()系统调用不可用CRIU 热迁移、部分容器工具失效网络 / 进程排障工具受限七、总结CONFIG_KCMP是 5.12 独立启用kcmp()的开关用于安全比对进程间内核资源共享关系核心价值替代不安全的 proc 解析为容器、热迁移、调试提供高效安全的资源比对能力生产环境建议保持默认y避免容器 / CRIU 功能失效极简内核可关闭但需评估工具兼容性

相关文章:

linux kernel CONFIG_KCMP解析

CONFIG_KCMP 是 Linux 内核 5.12 新增的独立开关,用于启用 kcmp () 系统调用,核心作用是让用户态安全地比对两个进程是否共享内核资源(FD、内存、信号等),典型用于容器 / CRIU 热迁移、调试与安全审计。下面从配置、系…...

copilot学生认证按键无法点击

万能的网友大佬们,谁知道这个绿色按键怎么变成灰色了无法再认证了呀呜呜呜...

AI原生OPC项目路演实录分享

AI北纬社区首期OPC加速营的路演在节前顺利举行。项目是从100多个报名中优中选优筛选出来的,录取率不到30%。学员不乏来自国内外知名高校的硕博人才和头部互联网大厂的资深大佬。我们在现场看完了全部项目。看之前以为会看到很多"AIX"的故事,看…...

怎么配置中转站,稳定的爽用gpt 5.5,附cc switch + codex 配置教程

想用gpt5.5,但翻墙太麻烦,没有境外信用卡,价格太高,这个时候选择中转站就成了不二的选择,下面来介绍下怎么配置中转站。 一、注册账号 地址:AI API Gateway 输入自己的账号密码 兑换菜单可以购买套餐、购…...

用Python 和 java 写 10 道题

1.已知1、1、2、3、5、8、13......就是从第三项开始,每一项等于前两项之和。求第100项。python写a,b 1,1 #第一项和第二项 for _ in range(3,101): #从第3项计算到第100项,需循环98次(前两项已有)a,b b,ab #a 变成前一项 b 变成新的当前…...

C#基础10

分线程通常指的是如何开启一个独立于主程序(主线程)之外的执行流,让程序能够“一心二用”。比如,主界面保持流畅响应用户点击,而后台线程在默默下载大文件或处理复杂计算。从最基础的底层实现到现代的高级写法&#xf…...

Apple MLX框架下的脉冲神经网络(SNN)实现与优化

1. 项目概述:mlx-snn的诞生背景与核心价值在深度学习领域,脉冲神经网络(SNN)正逐渐成为继传统人工神经网络(ANN)和卷积神经网络(CNN)之后的"第三代神经网络"。与常规神经网…...

[特殊字符] 数组中的多数元素 II:Boyer-Moore投票算法详解

问题描述 给定一个包含 n 个整数的数组 arr[],找出所有出现次数超过 floor(n/3) 次的数组元素。 注意:返回的多数元素数组应该是排序的。 示例: 输入:arr[] [2, 2, 3, 1, 3, 2, 1, 1] 输出:[1, 2] 解释&#xff1a…...

开源情报实战指南:从工具到体系的OSINT方法论与自动化实践

1. 项目概述:一个开源情报收集的实战指南最近在整理自己的安全工具箱时,发现很多朋友对开源情报(OSINT)的实战应用很感兴趣,但往往止步于理论,或者被海量的工具和碎片化的信息淹没。恰好,我在Gi…...

微信福音:2345清理王微信专清功能介绍

现在大家用微信的时间越来越长,微信里的缓存也越攒越多,经常是好几个G,特别占空间。但是想清理又怕删错重要数据,不敢随便动手。这时候,微信专清功能就显得尤为重要。2345清理王的微信专清功能,完美解决了这…...

Termi AI:基于Electron的智能桌面开发伴侣,集成Vite预览与AI编程助手

1. 项目概述:一个集成了AI助手的桌面开发伴侣如果你和我一样,每天大部分时间都泡在终端和编辑器里,那你肯定也幻想过:能不能有一个工具,能把我的项目实时预览和AI编程助手无缝地“焊”在一起?不用在浏览器、…...

AI编程助手集成Codex CLI:MCP协议实现智能代码分析与本地模型部署

1. 项目概述:连接AI与代码的智能桥梁 如果你和我一样,日常开发中频繁使用 Claude 或 Cursor 这类AI编程助手,同时又深度依赖 OpenAI Codex CLI 进行代码分析和重构,那么你很可能面临一个效率瓶颈:如何在不同的工具之间…...

【EAI(企业应用集成)工具】Asteria warp簡単紹介(アステリア ワープ)

目录 ■前言 ■Asteria warp簡単紹介 ■ASTERIA Warpとは ■ASTERIA Warp 命名哲学 ■ASTERIA WARPについて ■19年連続国内シェアNo.1 ■10,000社以上の企業での導入実績 ■ノーコードだから誰でも使える ■市场地位:日本市场的绝对王者 ■核心产品力&am…...

BrowserGym:基于LLM的浏览器自动化智能体开发实战指南

1. 项目概述:当浏览器自动化遇上大语言模型最近在探索大语言模型(LLM)与真实世界应用交互的边界时,我深度体验了ServiceNow开源的BrowserGym项目。这不仅仅是一个简单的网页自动化工具,它更像是一个为LLM量身定制的“浏…...

【收藏级】2026年大模型入门指南:小白程序员必看,告别AI焦虑,轻松切入AI行业

这篇文章想聊清楚一个很现实的问题:在2026年AI热潮愈演愈烈的今天,小白和程序员到底该怎么低成本进入AI行业? 如果你最近也在焦虑、在内耗,刷到各种AI热点就心慌,不知道该学什么、不知道该怎么开始,甚至担心…...

构建本地优先的代码片段管理工具:从设计到实践

1. 项目概述:一个为开发者量身定制的代码片段管理工具如果你和我一样,是个每天和代码打交道的开发者,那你肯定遇到过这样的场景:为了解决一个特定的问题,你花了半天时间在网上搜索、调试,终于写出了一段堪称…...

Flutter for OpenHarmony 中 webview_flutter 适配实战指南

Flutter for OpenHarmony 中 webview_flutter 适配实战指南 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 摘要 本文基于真实项目实践,完整介绍了在 Flutter for OpenHarmony(以下简称 FOH)工程中&…...

LangGraph 终极解析:从 “玩具 Agent“ 到 “生产级智能体“ 的核心武器

目录 LangGraph 终极解析:从 "玩具 Agent" 到 "生产级智能体" 的核心武器 一句话定位 为什么必须学 LangGraph?(LangChain 的致命缺陷) LangGraph 四大核心概念(一张图搞懂) 1. S…...

python系列【仅供参考】:js2py模块--python中执行js

js2py模块--python中执行js js2py 1. 在python中执行js代码 2. js代码翻译 3. 在js中调用Python函数 4. 在js中调用Python模块 js2py Python中执行JS代码,通常用两个库:js2py,pyexecjs。当网页使用 js 加密时我们可以使用这些库来分析 js 的实现逻辑,获取加密信息。 js2p…...

下载安装 Temurin® JDK JDK 21 - LTS 速度很慢,有办法加速吗?

下载 Temurin JDK JDK 21 - LTS 速度很慢,有办法加速吗? 加速下载 Temurin JDK 21 的方法 方法一:清华大学 TUNA 镜像(推荐 ⭐⭐⭐⭐⭐) 这是目前最快、最稳定的国内镜像,速度可以跑满带宽。 直接访问目…...

Godot XR Tools:加速VR/AR开发的模块化工具集与实战指南

1. 项目概述:Godot XR Tools 是什么? 如果你正在用 Godot 引擎捣鼓 VR 或 AR 项目,大概率会遇到一些“通用但繁琐”的问题:怎么让虚拟手自然地抓取物体?怎么实现一个稳定可靠的传送移动机制?UI 界面在 3D …...

python系列【仅供参考】:JS的解析与Js2Py使用

JS的解析与Js2Py使用 JS的解析与Js2Py使用 简介: JS的解析 事件监听器 搜索关键字 请求关联JS文件 Js2Py Js2Py的简单使用 安装Js2Py 执行JavaScript代码 调用JavaScript函数 Js2Py的应用示例 创建JavaScript文件 使用JavaScript JS的解析与Js2Py使用 简介: Js2Py是一个Pyt…...

基于工作流的低代码AI应用开发:Flock平台核心架构与实战指南

1. 项目概述:Flock,一个为AI应用构建者准备的“乐高积木”如果你正在寻找一个工具,能够让你像搭积木一样,快速构建出功能强大的聊天机器人、智能客服,甚至是能自主协作的多智能体系统,那么Flock很可能就是你…...

深入Android Framework:构建稳定、高效的无人售卖机系统

摘要: 本文聚焦于Android Framework框架层,探讨其在无人售卖机系统开发中的核心价值与应用实践。区别于常规应用层开发,无人售卖机因其特殊的运行环境(如弱网、断电风险、多外设交互)及业务需求(如交易安全、设备状态监控、离线能力),对Android系统的底层能力提出了更高…...

如何在华为HarmonyOS设备上部署microG服务:解决签名验证的完整技术指南

如何在华为HarmonyOS设备上部署microG服务:解决签名验证的完整技术指南 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore microG Services是一个开源免费的Google Play服务替代框架…...

#81_闲谈语言的分类

机器语言是二进制指令,CPU可直接执行; 低级语言通常指机器语言和汇编语言,与硬件紧密相关; 高级语言则接近自然语言,独立于具体硬件,需编译/解释才能运行; 中级语言并非严格分类,有时…...

golang如何实现桌面应用热更新_golang桌面应用热更新实现攻略

Go桌面应用无法真正热更新,只能通过go-selfupdate实现无缝重启:下载校验新二进制、替换并重启,需适配各平台签名与自启机制,插件机制不可行,核心难点在于更新时机判断与状态快照恢复。Go 桌面应用热更新无法真正“热”…...

5分钟快速上手!Calibre豆瓣插件终极安装指南,轻松获取中文图书元数据

5分钟快速上手!Calibre豆瓣插件终极安装指南,轻松获取中文图书元数据 【免费下载链接】calibre-douban Calibre new douban metadata source plugin. Douban no longer provides book APIs to the public, so it can only use web crawling to obtain da…...

为什么很多人 DFS 写得飞起,一到「矩阵最长递增路径」就彻底懵了?

为什么很多人 DFS 写得飞起,一到「矩阵最长递增路径」就彻底懵了? 有一类算法题,非常容易让人产生错觉。 看起来只是: 矩阵 + DFS结果一写。 不是超时。 就是死循环。 再不然: 明明逻辑没错 结果性能直接爆炸而「矩阵中的最长递增路径(Longest Increasing Path in a…...

欧拉回路(一笔画)

欧拉回路是图论中的一个经典概念,指一条经过图中每条边恰好一次并且起点和终点相同的闭合路径。通俗地讲,就是一笔画问题中能够不重复地走完所有边并回到起点的画法。 基本定义 欧拉回路:经过图中每条边恰好一次且闭合的回路。 欧拉通路&am…...