Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
linux-4.1.15_CVE-2022-3564 — Linux 内核 4.1.15 源代码快照,用于分析和研究 CVE-2022-3564,这是内核网络子系统中的一个漏洞。 | Kitploit
工具/GitHubGitHub/trinadh465/linux-4.1.15_cve-2022-3564
漏洞分析漏洞利用二进制分析论文与研究学习与教育
GitHubtrinadh465/linux-4.1.15_cve-2022-3564

linux-4.1.15_CVE-2022-3564

Linux 内核 4.1.15 源代码快照,用于分析和研究 CVE-2022-3564,这是内核网络子系统中的一个漏洞。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
352年前尚未审核
分享

Linux 内核 4.x 版本发布 http://kernel.org/

这些是 Linux 4 版本的发布说明。请仔细阅读, 因为它们会告诉你这是怎么回事、如何安装内核, 以及出现问题时应如何处理。

什么是 LINUX?

Linux 是 Unix 操作系统的一个克隆,由 Linus Torvalds 从零开始编写,并得到了来自互联网上一个松散协作的黑客团队的协助。 它致力于符合 POSIX 和 Single UNIX Specification 规范。

它拥有你在一个现代化、功能完备的 Unix 系统中所期望的所有特性, 包括真正的多任务处理、虚拟内存、共享库、按需加载、 共享写时复制可执行文件、完善的内存管理, 以及包括 IPv4 和 IPv6 在内的多协议栈网络。

它根据 GNU 通用公共许可证分发——详情请参阅随附的 COPYING 文件。

它能在哪些硬件上运行?

虽然最初是为 32 位 x86 架构的 PC(386 或更高)开发的, 但如今 Linux 也运行在(至少)Compaq Alpha AXP、Sun SPARC 和 UltraSPARC、Motorola 68000、PowerPC、PowerPC64、ARM、Hitachi SuperH、 Cell、IBM S/390、MIPS、HP PA-RISC、Intel IA-64、DEC VAX、AMD x86-64、 AXIS CRIS、Xtensa、Tilera TILE、AVR32 和 Renesas M32R 架构上。

Linux 可以很容易地移植到大多数通用 32 位或 64 位架构, 只要它们具有分页内存管理单元(PMMU),并且有 GNU C 编译器(gcc) (GNU 编译器套件 GCC 的一部分)的移植版本。Linux 也已被移植到 一些没有 PMMU 的架构上,不过在这些架构上功能显然会受到一定限制。 Linux 也已经被移植到它自身。你现在可以将内核作为用户空间应用程序 运行——这被称为 UserMode Linux(UML)。

文档:

  • 互联网上有大量的电子文档,也有许多书籍,既有 Linux 特定的, 也有关于通用 UNIX 问题的。我建议在任何 Linux FTP 站点上查看 LDP(Linux 文档项目)书籍的文档子目录。本 README 并不是系统的 文档:有更好的资料来源可用。

  • Documentation/ 子目录中有各种 README 文件: 这些文件通常包含一些驱动程序的特定内核安装说明。 请参阅 Documentation/00-INDEX 以了解每个文件包含的内容。 请阅读 Changes 文件,因为它包含可能因升级内核而导致的问题的信息。

  • Documentation/DocBook/ 子目录包含几本面向内核开发者和用户的指南。 这些指南可以渲染为多种格式:PostScript (.ps)、PDF、HTML 和 man 手册页等。安装后,"make psdocs"、"make pdfdocs"、"make htmldocs" 或 "make mandocs" 将以所请求的格式渲染文档。

安装内核源代码:

  • 如果安装完整源代码,请将内核 tarball 放在你有权限的目录中 (例如你的主目录)并解包:

    xz -cd linux-4.X.tar.xz | tar xvf -

    将 "X" 替换为最新内核的版本号。

    不要使用 /usr/src/linux 目录!该目录包含一组(通常不完整的) 内核头文件,供库头文件使用。它们应该与库相匹配, 不应被任何最新的内核(kernel-du-jour)搞乱。

  • 你也可以通过打补丁在 4.x 各版本之间升级。补丁以 xz 格式分发。 要通过打补丁进行安装,请获取所有较新的补丁文件, 进入内核源代码的顶层目录(linux-4.X)并执行:

    xz -cd ../patch-4.x.xz | patch -p1

    将 "x" 替换为你当前源代码树版本 "X" 之后的所有版本号, 按顺序 执行,你应该没问题。你可能需要删除备份文件 (some-file-name~ 或 some-file-name.orig),并确保没有失败的补丁 (some-file-name# 或 some-file-name.rej)。如果有,那么要么是你, 要么是我犯了错误。

    与 4.x 内核的补丁不同,4.x.y 内核(也称为 -stable 内核)的补丁 不是增量式的,而是直接应用于基础 4.x 内核。例如,如果你的基础 内核是 4.0,并且你想应用 4.0.3 补丁,你不能先应用 4.0.1 和 4.0.2 补丁。同样,如果你运行的是内核版本 4.0.2 并想升级到 4.0.3, 你必须先撤销 4.0.2 补丁(即 patch -R),_然后_再应用 4.0.3 补丁。 你可以在 Documentation/applying-patches.txt 中了解更多信息。

    或者,可以使用 patch-kernel 脚本来自动化此过程。 它确定当前内核版本并应用找到的任何补丁。

    linux/scripts/patch-kernel linux

    上述命令中的第一个参数是内核源代码的位置。 补丁从当前目录应用,但也可以将另一目录指定为第二个参数。

  • 确保没有过时的 .o 文件和依赖项残留:

    cd linux make mrproper

    现在你应该已经正确安装了源代码。

软件要求

编译和运行 4.x 内核需要各种软件包的最新版本。 请查阅 Documentation/Changes 了解所需的最低版本号, 以及如何获取这些软件包的更新。请注意,使用过旧的软件包版本 可能会导致难以追踪的间接错误,所以不要以为在构建或运行过程中 出现明显问题时,你只需要更新软件包即可。

内核的 BUILD 目录:

编译内核时,默认情况下所有输出文件将与内核源代码存储在一起。 使用选项 "make O=output/dir" 允许你为输出文件(包括 .config) 指定其他位置。示例:

root@kitploit:~
 kernel source code: /usr/src/linux-4.X
 build directory:    /home/name/build/kernel

要配置和构建内核,请使用:

root@kitploit:~
 cd /usr/src/linux-4.X
 make O=/home/name/build/kernel menuconfig
 make O=/home/name/build/kernel
 sudo make O=/home/name/build/kernel modules_install install

请注意:如果使用 'O=output/dir' 选项,则必须在所有 make 调用中 使用它。

配置内核:

即使你只是升级一个小版本,也不要跳过此步骤。 每个版本都会添加新的配置选项,如果配置文件没有按预期设置, 会出现奇怪的问题。如果你想以最少的工作量将现有配置带到新版本, 请使用 "make oldconfig",它只会询问你新问题的答案。

  • 其他配置命令包括:

    "make config" 纯文本界面。

    "make menuconfig" 基于文本的彩色菜单、单选列表和对话框。

    "make nconfig" 增强的基于文本的彩色菜单。

    "make xconfig" 基于 X windows (Qt) 的配置工具。

    "make gconfig" 基于 X windows (Gtk) 的配置工具。

    "make oldconfig" 基于你现有的 ./.config 文件的内容对所有问题 采用默认值,并询问新的配置符号。

    "make silentoldconfig" 同上,但避免用已回答的问题使屏幕杂乱。 此外还会更新依赖关系。

    "make olddefconfig" 同上,但将新符号设置为其默认值而不提示。

    "make defconfig" 通过使用默认符号值创建 ./.config 文件, 这些值来自 arch/$ARCH/defconfig 或 arch/$ARCH/configs/${PLATFORM}_defconfig, 具体取决于架构。

    "make ${PLATFORM}_defconfig" 通过使用以下位置的默认符号值创建 ./.config 文件:arch/$ARCH/configs/${PLATFORM}_defconfig。 使用 "make help" 获取你的架构的所有可用平台列表。

    "make allyesconfig" 通过尽可能将符号值设置为 'y' 来创建 ./.config 文件。

    "make allmodconfig" 通过尽可能将符号值设置为 'm' 来创建 ./.config 文件。

    "make allnoconfig" 通过尽可能将符号值设置为 'n' 来创建 ./.config 文件。

    "make randconfig" 通过将符号值设置为随机值来创建 ./.config 文件。

    "make localmodconfig" 基于当前配置和已加载模块(lsmod)创建配置。 禁用加载的模块不需要的任何模块选项。

    root@kitploit:~
                        要为另一台机器创建 localmodconfig,
                        将该机器的 lsmod 存储到文件中,
                        并将其作为 LSMOD 参数传入。
    
                target$ lsmod > /tmp/mylsmod
                target$ scp /tmp/mylsmod host:/tmp
    
                host$ make LSMOD=/tmp/mylsmod localmodconfig
    
                        上述操作在交叉编译时同样有效。
    

    "make localyesconfig" 与 localmodconfig 类似,不同之处在于它将 所有模块选项转换为内置(=y)选项。

    你可以在 Documentation/kbuild/kconfig.txt 中找到有关使用 Linux 内核配置工具的更多信息。

  • 关于 "make config" 的注意事项:

    • 不必要的驱动程序会使内核变大,并且在某些情况下可能导致问题: 探测不存在的控制器卡可能会干扰你的其他控制器。

    • 将 "Processor type" 设置为高于 386 来编译内核, 将导致内核无法在 386 上工作。内核将在启动时检测到这一点, 并放弃运行。

    • 编译包含数学模拟(math-emulation)的内核,如果存在协处理器, 仍将使用它:在那种情况下数学模拟只是永远不会被使用。 内核会稍微大一些,但可以在不同的机器上工作, 无论它们是否有数学协处理器。

    • "kernel hacking" 配置细节通常会导致内核变得更大或更慢 (或两者兼有),甚至可能使内核更不稳定,因为它会配置一些例程 来主动尝试破坏不良代码以发现内核问题(kmalloc())。因此, 对于 "development"、"experimental" 或 "debugging" 特性, 你可能应该回答 'n'。

编译内核:

  • 确保你至少拥有 gcc 3.2。 有关更多信息,请参阅 Documentation/Changes。

    请注意,你仍然可以使用此内核运行 a.out 用户程序。

  • 执行 "make" 以创建压缩的内核映像。如果你安装了适合内核 makefile 的 lilo,也可以执行 "make install",但你可能需要先检查 你的特定 lilo 设置。

    要执行实际安装,你必须是 root 用户,但正常的构建过程都不需要。 不要滥用 root 的名义。

  • 如果你将内核的任何部分配置为 `modules',你还需要执行 "make modules_install"。

  • 详细的内核编译/构建输出:

    通常,内核构建系统以相当安静的模式运行(但并非完全静默)。 然而,有时你或其他内核开发者需要精确地看到编译、链接或其他 命令的实际执行过程。为此,请使用 "verbose" 构建模式。 这可以通过在 "make" 命令中插入 "V=1" 来实现。例如:

    make V=1 all

    要让构建系统还说明每个目标重建的原因,请使用 "V=2"。 默认是 "V=0"。

  • 请保留一个备份内核,以防出现问题。对于开发版本尤其如此, 因为每个新版本都包含尚未调试的新代码。确保同时保留与该内核 对应的模块的备份。如果你要安装的新内核与当前工作内核的版本号 相同,请在执行 "make modules_install" 之前备份你的模块目录。

    或者,在编译之前,使用内核配置选项 "LOCALVERSION" 来向常规 内核版本追加一个唯一后缀。LOCALVERSION 可以在 "General Setup" 菜单中设置。

  • 要启动你的新内核,你需要将内核映像(例如编译后的 .../linux/arch/i386/boot/bzImage)复制到你的常规可引导内核 所在的位置。

  • 不再支持在没有 LILO 等引导加载程序的情况下直接从软盘引导内核。

    如果你从硬盘引导 Linux,很可能你使用的是 LILO,它使用 /etc/lilo.conf 文件中指定的内核映像。内核映像文件通常是 /vmlinuz、/boot/vmlinuz、/bzImage 或 /boot/bzImage。 要使用新内核,请保存旧映像的副本,并将新映像复制到旧映像之上。 然后,你必须重新运行 LILO 以更新加载映射!!如果不这样做, 你将无法引导新内核映像。

    重新安装 LILO 通常只需要运行 /sbin/lilo。 你可能希望编辑 /etc/lilo.conf,为你的旧内核映像(例如 /vmlinux.old)指定一个条目,以防新内核无法工作。 有关更多信息,请参阅 LILO 文档。

    重新安装 LILO 后,一切就都准备好了。关闭系统,重新启动, 然后尽情享受吧!

    如果你需要更改内核映像中的默认根设备、视频模式、 ramdisk 大小等,请使用 'rdev' 程序(或在适当时使用 LILO 引导 选项)。无需为了更改这些参数而重新编译内核。

  • 使用新内核重新启动,尽情享受。

如果出现问题:

  • 如果你遇到似乎是由内核错误引起的问题,请查看 MAINTAINERS 文件, 看看是否有特定人员与你遇到问题的内核部分相关联。如果那里没有 列出任何人,那么次好的选择是将问题邮寄给我 ([email protected]),也可能会发送到任何其他相关的 邮件列表或新闻组。

  • 在所有错误报告中,请说明你使用的是哪个内核,如何重现该问题, 以及你的设置是什么(运用你的常识)。如果问题是最新的,请告诉我; 如果问题已经存在,请尽量告诉我你最初注意到它的时间。

  • 如果错误导致类似如下的消息

    unable to handle kernel paging request at address C0000010 Oops: 0002 EIP: 0010:XXXXXXXX eax: xxxxxxxx ebx: xxxxxxxx ecx: xxxxxxxx edx: xxxxxxxx esi: xxxxxxxx edi: xxxxxxxx ebp: xxxxxxxx ds: xxxx es: xxxx fs: xxxx gs: xxxx Pid: xx, process nr: xx xx xx xx xx xx xx xx xx xx xx

    或类似的调试信息出现在屏幕上或系统日志中,请精确地复制它。 该转储对你来说可能看起来难以理解,但它确实包含可能有助于调试 问题的信息。转储上方的文本也很重要:它说明了一些关于内核为何 转储代码的信息(在上面的例子中,是由于内核指针错误)。 有关理解转储的更多信息,请参阅 Documentation/oops-tracing.txt

  • 如果你使用 CONFIG_KALLSYMS 编译内核,你可以按原样发送转储, 否则你将不得不使用 "ksymoops" 程序来理解转储(但通常更倾向于 使用 CONFIG_KALLSYMS 编译)。该工具可以从 ftp://ftp..kernel.org/pub/linux/utils/kernel/ksymoops/ 下载。 或者,你也可以手动进行转储查找:

  • 在调试像上面这样的转储时,如果你能查找到 EIP 值的含义, 会有很大帮助。十六进制值本身对我或其他人帮助不大: 它取决于你的特定内核设置。你应该做的是从 EIP 行取出十六进制值 (忽略 "0010:"),然后在内核符号表(namelist)中查找它, 以确定哪个内核函数包含该出错地址。

    要找出内核函数名称,你需要找到与出现该症状的内核相关联的系统 二进制文件。它就是 'linux/vmlinux' 文件。要提取符号表并将其与 内核崩溃时的 EIP 进行匹配,请执行:

    nm vmlinux | sort | less

    这将为你提供一个按升序排列的内核地址列表,从中很容易找到包含 出错地址的函数。请注意,内核调试消息给出的地址不一定与函数地址 完全匹配(事实上,可能性很小),所以你不能直接 'grep' 该列表: 但是,该列表会给出每个内核函数的起始地址,因此通过查找起始地址 低于你要查找的地址、并且后跟有更高地址的函数,你就会找到你想要 的那个。事实上,在问题报告中包含一点"上下文"可能是一个好主意, 在感兴趣的那行周围给出几行内容。

    如果你出于某种原因无法执行上述操作(你有一个预编译的内核映像或 类似情况),尽可能多地告诉我你的设置会有所帮助。 请阅读 REPORTING-BUGS 文档以了解详情。

  • 或者,你可以在运行中的内核上使用 gdb(只读;即你不能更改值或 设置断点)。为此,先用 -g 编译内核;适当地编辑 arch/i386/Makefile,然后执行 "make clean"。你还需要启用 CONFIG_PROC_FS(通过 "make config")。

    使用新内核重新启动后,执行 "gdb vmlinux /proc/kcore"。 你现在可以使用所有常用的 gdb 命令。用于查找系统崩溃点的命令是 "l *0xXXXXXXXX"。(将 XXX 替换为 EIP 值。)

    对未运行的内核使用 gdb 目前会失败,因为 gdb(错误地) 忽略了编译内核时使用的起始偏移量。

下载工具