一个在显示设置里潜伏多年的指针截断错误,最近有了新的线索:问题根源并不在代码本身,而在于大量用户正运行着极其古老的显卡驱动。当我们把分析报告发给显卡厂商后,对方只是反问了一句:能不能把崩溃系统上的驱动版本号给我们看看?

调查结果让人大吃一惊。所有崩溃机器上的驱动构建号停留在“build 314”,而同一家厂商当前的驱动构建号已经跑到“build 2718”附近。也就是说,漏洞其实早就被厂商修复了,但用户始终没有拿到那个修复。为什么?

打开网易新闻 查看精彩图片

起初最合理的猜测是,这些用户关掉了Windows更新,或是主动拒绝了显卡驱动升级。然而进一步挖掘后,这个解释站不住脚。真正的症结,出在一套被大多数人忽视的驱动更新规则上:视频驱动是一类计算机制造商握有极高控制权的驱动。

当你从戴尔、惠普、联想这样的厂商手里买到一台笔记本电脑或整机时,机内的显卡虽然在芯片层面来自英伟达、AMD或英特尔,但驱动却往往经过了厂商自己的二次验证。厂商会根据自家产品的具体硬件组合——包括主板走线、供电设计、散热方案甚至定制版显卡固件——在实验室里针对几台参考机型完成专门的接受性测试,然后发布一份“认证版驱动”。这个环节显卡芯片原厂根本无从知晓,也无从替厂商代劳。

这套认证逻辑并不会随着电脑售出而画上句号。售出之后,计算机制造商仍然需要为每一版新的驱动更新负责:把新驱动在自己的参考主机上跑过一轮认证,确认不会引发蓝屏、黑屏或性能异常,再推给用户。而这也正是大问题所在。

在现实中,制造商的驱动认证热情会随着时间快速衰减。通常在一年到一年半,顶多两年,厂商就会停止为旧机型认证新驱动。两年之后,该款机型便被实质上放弃了。从那一刻起,该型号所有用户只能滞留在厂商最后一次认证时的驱动版本上,即便显卡原厂此后推送了100个修复,也跟他们再无关系。

更值得留意的是微软和显卡厂主动帮助用户“解困”的路径,在机制层面也被刻意压制住。微软确实维护着大批硬件通用驱动,可以覆盖很多显卡的基本功能。但是,微软有意将这些通用驱动的优先级设得很低,确保来自计算机制造商的认证驱动永远排在它们前面。显卡原厂提供的公开驱动同样被显卡厂自己做了降级处理:如果检测到系统里存在制造商认证过的驱动,那么显卡原厂的通用版本就不会覆盖上去,哪怕那个认证版已经严重过时。

层层规则叠加之后,优先级链条就变得异常顽固:制造商认证驱动——无论年头多久,无论有多少未修的已知漏洞——总是排在第一位。微软的通用驱动和显卡原厂的公版驱动都被压在下面,用户几乎无法通过常规更新渠道跳出这口“老驱动”的井。

所以,我们今天看到的画面很清楚:一个指针截断bug,显卡厂商在高版本驱动中已悄悄修好,可用户手里的驱动一直停在building 314上打转。不是他们不想升级,而是他们所拥有的那台电脑,从出厂后的某一刻起,就已被它的制造者捆在了一座昔日的时间胶囊里。