CVE-2026-43378Linux内核的SMB服务器组件(ksmbd)中存在一个释放后重用(Use-After-Free)漏洞。该漏洞位于`smb2_open()`函数的处理逻辑中。由于代码逻辑错误,在调用`rcu_read_unlock()`结束RCU读临界区之后,仍然尝试对之前获取的`opinfo`指针进行解引用操作。这种不当的内存访问顺序创建了一个竞态条件窗口,使得该指针指向的内存可能在访问前被释放或回收,从而引发系统崩溃或可能被利用于执行任意代码。
该漏洞的根源在于对Linux内核RCU(Read-Copy-Update)机制的使用不当。RCU机制允许多个读者并发访问数据,但在读者离开临界区(调用`rcu_read_unlock()`)后,受保护的数据可能被立即销毁。在`smb2_open()`函数中,开发者通过`rcu_dereference(fp->f_opinfo)`获取了`opinfo`指针,但随后过早地调用了`rcu_read_unlock()`。在解锁之后,代码继续使用该指针。此时,如果另一个内核路径释放了该对象,当前线程将访问无效内存(UAF)。由于SMB服务通常运行在内核态,成功利用此漏洞可导致内核崩溃(拒绝服务)或在特定条件下实现本地提权或远程代码执行。