昇腾故障案例详情页

Atlas 800-3010 fchownat 和 close 并发访问相同 socket 导致 system crash

更新时间: 2022/03/03

暂无评分

问题信息

问题来源产品大类产品子类关键字
实验室问题安装部署驱动固件system crash、 fchownat、 close

问题现象描述

受影响系统:

SLES15、Ubuntu16.04 LTS、Ubuntu 18.04 LTS、Oracle Linux 7

问题现象:

该问题为内核 bug。并发执行 fchownat 和 close 系统调用并操作同一个 socket 会触发 "NULL pointer dereference" 问题,从而导致 system crash。错误日志如下:

问题复现代码如下:

socket.c

关键过程、根本原因分析

fchownat 系统调用用于更改文件的用户ID和组ID,close 系统调用用于关闭文件描述,并且 fchownat 和 close 操作对象为 socket 时会分别调用 sockfs_setattr 和 sock_release 函数。函数代码如下:

由于 sockfs_setattr 函数执行过程没有增加文件描述符的引用计数,此时执行 sock_release,调用 "sock->ops->release(sock);",sock->sk 会被置空,sockfs_setattr 接着执行 "sock->sk->sk_uid = iattr->ia_uid;" 来修改文件属性时就会出现 "NULL pointer dereference" 问题。

结论、解决方案及效果

升级或安装patch。

SLES15:kernel (SUSE-SU-2019:0224-1)

Ubuntu 16.04 LTS:linux-hwe vulnerabilities (USN-3752-2)

Ubuntu 18.04 LTS:linux, linux-aws, linux-gcp, linux-kvm, linux-raspi2 vulnerabilities (USN-3752-1)

Oracle Linux 7 : Unbreakable Enterprise kernel (ELSA-2018-4195)

经验总结、预防措施和规范建议

备注

https://patchwork.ozlabs.org/patch/926519/

https://www.tenable.com/cve/CVE-2018-12232

本页内容

该页面对您有帮助吗?
我要评分