RETBleed: WARNING: Spectre v2...的解决办法及一次被内核折腾的经历

本文最后更新于:3 个月前

点击获得封面头图

此文章使用CC-BY-NC协议,协议详情介绍请看此文


前言

尽管文章标题是这个, 但RETBleed: WARNING: Spectre v2...这个报错是在我被内核折腾完后发生的.

所以我要先述说折腾的故事.

为什么被内核折腾

我使用的电脑系统是Ubuntu 22.04.1 LTS(以下简用ub代之).

ub有一个很大的特点就是: 稳. 向来都是一个中性词, 随着知识面的不断扩展, 在我这儿逐渐变成了贬义词.

为什么这么说呢? 又要从我的审美说起了(别着急马上到重点, 我这前面都是铺垫🌚).

我很喜欢gtk风格的软件, 圆滑, 有质感. 但是apt中的gtk软件并不多, 同时那些开发者并没有发布编译好的软件包, 因此只能自己从源码编译.

实际上, 他们发布了flatpak的包, 但是我非常不喜欢flatpak, 感觉它和系统没法完全融为一体.

结果就在这编译的过程中遇到了问题: 太老了.

ub上有一个依赖始终无法安装: libadwaita-1.2.0-1(如果你可以安装请务必告诉我安装方法!).

首先是通过apt, apt安装的版本是1.1; 接着我尝试从源码编译, 又遇到了新的依赖问题gtk4 4.9.1…

就这样恶性循环, 版本号始终低那么一点点. 后来无意中了解到, ub 22.04取消了libadwaita-1.2.0-1!

那这和折腾内核有什么关系呢???

因为版本号过低, 于是我打算使用预发布的apt源. 就在我换了源, update, 然后upgrade完再重启后:

无法开机, 报错了! Kernel offset!

因此, 我踏上了被迫折腾内核的旅程.

过程

我赶紧拿出手机开始搜解决办法, 同时在tg群中求助.

与此同时, 我也通过recovery mode重新进入到了桌面.

怎么进入这个mode呢? 首先你需要在加载主版画面的时候狂按ESC, 直到加载出类似U盘启动盘的菜单画面.

注意, ESC多按一下就会进到grub的指令界面, 所以按的时候要看屏幕, 不要按多了!

显示菜单后, 移动到下面的recovery mode(当时比较慌乱, 没有记太清名字. 总之不是第一个选项)回车.

然后会再显示一个界面, 似乎有一个什么什么boot, 大概是第一个选项, 回车.

接着会看到一堆内核列表, 有些内核后面还有(recovery). 我选择了-56版本.

因为在换了预发布源update的时候, 看到了要更新的内核版本为-57, 所以选择一个比它低的.

与此同时, 群友建议我先update. 于是我删除了/etc/apt/sources.list刚加的两行预发布源, 同时update了一下.

没有过去! 通过分析报错, 大概知道了是因为显卡驱动的问题, 现有的驱动和最新的系统冲突了. 而且我用的是闭源的Nvidia驱动.

于是, 在建议之下, 我purge了nvidia*, 同时autoremove了一些东西.

然后purge了-57的内核, update过去了. 再次尝试重启:

成功!

重新进入到系统后, update时发现了新的错误:

anbox, 似乎是我之前安装过的一个在linux模拟运行安卓软件的容器.

反正也卸载了, 于是直接把报错提示的那个路径删除了.

RETBleed

尽管开机正常了, 却出现了一个新的提示:

这个描述看起来就很恐怖了, 什么数据可能泄露. 一搜索, 好家伙, 居然是一个可执行漏洞!

怎么解决呢? 很多篇文章都没有说怎么解决, 都是在提问.

有些咨询文章提到这个漏洞已经在5.19版本的内核中解决了.

而我现在的内核版本是5.15.0-56, 怎么之前开机的时候没有这个提示.

想到先前被内核折腾的经历, 我打算升级内核了. 但是apt update和upgrade都是最新的. 更不会考虑使用预发布源了.

于是搜索了怎么升级内核. 看到有一个方法: sudo apt upgrade linux-image-generic.

奇怪, 我upgrade都提示最新了, upgrade单独一个包怎么可能提示呢?…

但是执行之后, 还真有反应:

microcode, 也有搜到RETBleed是一个对微处理器的攻击, 那这个upgrade大概有用吧.

再次重启, 提示消失!

关于有没有必要更新内核, 可以看这篇文章: https://blog.csdn.net/weixin_33525298/article/details/112200310


我是听话的便当.

Bye~❛‿˂̵✧