首页 > 解决方案 > 如何获得两个 Linux 内核版本之间的错误修复或补丁?

问题描述

我正在尝试查找与两个内核版本之间已修复的错误相关的信息。

假设在我的 ubuntu 上当前内核版本是 5.4.0,所以我想知道在 5.4.0 - 5.4.1 或 5.5.0 之间修复的错误或安全风险是什么

标签: linux-kernelkernel

解决方案


我知道这对提问者来说并不明显,但这个问题有点不明确。让我解释。

问题是:在这个问题的上下文中,什么是“内核版本”?

对于“主要”(上游,即最终https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/或其维护的分支之一)Linux 开发, “版本”是一种git提交标签,可以使用以下命令找到并创建差异/变更日志git,例如:

~/build/linux$ git log --pretty=oneline  v5.15-rc5..v5.15-rc6
519d81956ee277b4419c723adfb154603c2565ba (tag: v5.15-rc6) Linux 5.15-rc6
cd079b1f870729a9fe3294f800dff18b548f129d Merge tag 'libata-5.15-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata
f2b3420b921d142b4c55f7445385bdab4060d754 Merge tag 'block-5.15-2021-10-17' of git://git.kernel.dk/linux-block
cc0af0a95172db52db2ab41b1e8a9c9ac0930b63 Merge tag 'io_uring-5.15-2021-10-17' of git://git.kernel.dk/linux-block
3bb50f8530c9cb5ec69c0744b7fd32d0ca404254 Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
be9eb2f00fa7245116d49f76614054cce8e07af8 Merge tag 'powerpc-5.15-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
...

所以那部分是“容易的”。

但这与 ubuntu 内核更改日志完全不同,即使对于相同的版本标签也是如此……而且它们永远不会相同

首先,Ubuntu(和 Debian,以及某些其他发行版)将内核构建拆分为多个包。即使以相同的方式“标记版本”,它们也可以包含不同的更改。

就我而言,目前是 Ubuntu 20.04,我有:

~/build/linux$ dpkg -S /lib/modules/`uname -r` /boot/vmlinuz-`uname -r`
linux-modules-5.11.0-38-lowlatency, linux-headers-5.11.0-38-lowlatency: /lib/modules/5.11.0-38-lowlatency
linux-image-5.11.0-38-lowlatency: /boot/vmlinuz-5.11.0-38-lowlatency

即三个包linux-moduleslinux-headerslinux-image

可以向包子系统 ( apt) 询问有关以下内容的 (*.deb包) 更改日志:

$ apt changelog linux-image-5.11.0-38-lowlatency

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Get:1 https://changelogs.ubuntu.com linux-signed-hwe-5.11 5.11.0-38.42~20.04.1 Changelog [102 kB]
linux-signed-hwe-5.11 (5.11.0-38.42~20.04.1) focal; urgency=medium

  * Master version: 5.11.0-38.42~20.04.1

 -- Stefan Bader <stefan.bader@canonical.com>  Tue, 28 Sep 2021 17:39:40 +0200

linux-signed-hwe-5.11 (5.11.0-37.41~20.04.2) focal; urgency=medium

  * Master version: 5.11.0-37.41~20.04.2

 -- Stefan Bader <stefan.bader@canonical.com>  Fri, 24 Sep 2021 10:43:02 +0200
...

但正如您所看到的,这些“元参考”——指向 Ubuntu 的主要发行版内核分支。

在这一点上......你深深地陷入了依赖于发行版的行为(Ubuntu 打包/维护其内核的方式与 Debian 不同,更不用说与 RHEL/CentOS 或 Alpine 的差异,或或或或......)。

对于 Ubuntu,“发行版内核”在 git 上可用,https: //wiki.ubuntu.com/Kernel/Dev/KernelGitGuide,您可以再次克隆并查询差异(现在使用“Ubuntu 版本”标签)如上所示的主线。我把它作为练习留给读者:-)

对于其他 Linux 发行版(首先是 RHEL 衍生产品),更改日志包含对应用更改的简短描述以及(发行版)错误编号rpm --changelog kernel(通常)。但至少 Redhat 没有可用于查看背后实际代码更改的开放/公共 git 存储库。

要解释为什么(以及如何,即它们何时/如何与主线同步和/或选择性地向后移植)分发维护自己的内核树的原因将比这篇 SO 帖子的余量要多得多;我暂时搁置这一点,作为题外话。主要问题。


推荐阅读