CVE-2023-53571CVE-2023-53571是Linux内核drm/i915图形驱动中的一个空指针解引用漏洞,存在于intel_get_crtc_new_encoder()函数中。该漏洞源于内核在处理CRTC(阴极射线管控制器)的原子状态(atomic state)时,当无法在原子状态中找到与CRTC关联的连接器(connector)时,代码尝试从一个可能为NULL的encoder(编码器)指针获取dev(设备)指针,导致内核直接发生oops(内核崩溃)。原始代码使用WARN宏的目的是打印警告信息,而非直接触发内核崩溃,但由于编码器指针可能为NULL,在解引用时会导致系统不可用。此漏洞影响系统的可用性,可能导致本地用户触发内核崩溃或拒绝服务(DoS)状态。该漏洞已在多个Linux内核稳定版本中得到修复,通过从原子状态而非潜在的NULL encoder获取dev指针来解决此问题。
该漏洞位于Linux内核的drm/i915驱动模块中,具体在intel_get_crtc_new_encoder()函数内。在DRM(Direct Rendering Manager)原子模式设置(atomic mode setting)框架中,当系统处理显示状态变更时,需要查找与特定CRTC关联的新编码器。原始代码逻辑使用WARN_ON宏来检查编码器查找结果,WARN_ON的设计初衷是在条件为真时打印警告信息而非导致系统崩溃。然而,在特定场景下(如无法在原子状态中找到对应CRTC的连接器时),encoder指针可能为NULL,代码继续执行并尝试通过encoder->dev获取设备指针,从而触发空指针解引用,导致内核oops(kernel panic)。攻击者需要本地低权限访问权限即可触发此漏洞,无需用户交互。该漏洞的修复方案(cherry picked from commit 3b6692357f70498f617ea1b31a0378070a0acf1c)是将获取dev指针的来源从可能为NULL的encoder改为从原子状态(atomic state)中获取,从而避免了空指针解引用的发生。修复涉及多个稳定内核分支,包括0fe6ef82e4f4764e8f556632e4cd93d78d448e99、54202488c835dab8c648acd107f0bb8eaa699894、631420b06597a33c72b6dcef78d1c2dea17f452d、780f303233c35eeb5132e3ee1cbc8f4cebe86dd2和8cd725315c559a8a4d18ac1d7fce1d6b9a667529等提交。