🇰🇷 한글 설명
Linux 커널의 RDMA/core 모듈에서 sysfs 노드에 접근할 때 ib_port 구조체가 초기화되기 전이나 해제된 후에 접근될 수 있어 NULL 포인터 역참조가 발생합니다. 이로 인해 커널 패닉(Oops)이 발생할 수 있습니다. 해결책으로 sysfs kobject 추가 전에 ib_port를 설정하고, 제거 후 초기화하도록 수정되었습니다.
💡 쉬운 설명
인피니밴드(고속 네트워크) 장치의 포트 정보를 읽는 과정에서 아직 준비되지 않은 데이터에 접근해 시스템이 비정상 종료될 수 있는 문제입니다. 이 문제를 해결하려면 커널을 최신 보안 패치 버전으로 업데이트해야 합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/core: Make sure "ib_port" is valid when access sysfs node
The "ib_port" structure must be set before adding the sysfs kobject,
and reset after removing it, otherwise it may crash when accessing
the sysfs node:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000050
Mem abort info:
ESR = 0x96000006
Exception class = DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000006
CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp = 00000000e85f5ba5
[0000000000000050] pgd=0000000848fd9003, pud=000000085b387003, pmd=0000000000000000
Internal error: Oops: 96000006 [#2] PREEMPT SMP
Modules linked in: ib_umad(O) mlx5_ib(O) nfnetlink_cttimeout(E) nfnetlink(E) act_gact(E) cls_flower(E) sch_ingress(E) openvswitch(E) nsh(E) nf_nat_ipv6(E) nf_nat_ipv4(E) nf_conncount(E) nf_nat(E) nf_conntrack(E) nf_defrag_ipv6(E) nf_defrag_ipv4(E) mst_pciconf(O) ipmi_devintf(E) ipmi_msghandler(E) ipmb_dev_int(OE) mlx5_core(O) mlxfw(O) mlxdevm(O) auxiliary(O) ib_uverbs(O) ib_core(O) mlx_compat(O) psample(E) sbsa_gwdt(E) uio_pdrv_genirq(E) uio(E) mlxbf_pmc(OE) mlxbf_gige(OE) mlxbf_tmfifo(OE) gpio_mlxbf2(OE) pwr_mlxbf(OE) mlx_trio(OE) i2c_mlxbf(OE) mlx_bootctl(OE) bluefield_edac(OE) knem(O) ip_tables(E) ipv6(E) crc_ccitt(E) [last unloaded: mst_pci]
Process grep (pid: 3372, stack limit = 0x0000000022055c92)
CPU: 5 PID: 3372 Comm: grep Tainted: G D OE 4.19.161-mlnx.47.gadcd9e3 #1
Hardware name: https://www.mellanox.com BlueField SoC/BlueField SoC, BIOS BlueField:3.9.2-15-ga2403ab Sep 8 2022
pstate: 40000005 (nZcv daif -PAN -UAO)
pc : hw_stat_port_show+0x4c/0x80 [ib_core]
lr : port_attr_show+0x40/0x58 [ib_core]
sp : ffff000029f43b50
x29: ffff000029f43b50 x28: 0000000019375000
x27: ffff8007b821a540 x26: ffff000029f43e30
x25: 0000000000008000 x24: ffff000000eaa958
x23: 0000000000001000 x22: ffff8007a4ce3000
x21: ffff8007baff8000 x20: ffff8007b9066ac0
x19: ffff8007bae97578 x18: 0000000000000000
x17: 0000000000000000 x16: 0000000000000000
x15: 0000000000000000 x14: 0000000000000000
x13: 0000000000000000 x12: 0000000000000000
x11: 0000000000000000 x10: 0000000000000000
x9 : 0000000000000000 x8 : ffff8007a4ce4000
x7 : 0000000000000000 x6 : 000000000000003f
x5 : ffff000000e6a280 x4 : ffff8007a4ce3000
x3 : 0000000000000000 x2 : aaaaaaaaaaaaaaab
x1 : ffff8007b9066a10 x0 : ffff8007baff8000
Call trace:
hw_stat_port_show+0x4c/0x80 [ib_core]
port_attr_show+0x40/0x58 [ib_core]
sysfs_kf_seq_show+0x8c/0x150
kernfs_seq_show+0x44/0x50
seq_read+0x1b4/0x45c
kernfs_fop_read+0x148/0x1d8
__vfs_read+0x58/0x180
vfs_read+0x94/0x154
ksys_read+0x68/0xd8
__arm64_sys_read+0x28/0x34
el0_svc_common+0x88/0x18c
el0_svc_handler+0x78/0x94
el0_svc+0x8/0xe8
Code: f2955562 aa1603e4 aa1503e0 f9405683 (f9402861)
📍 영향받는 시스템
RDMA/InfiniBand 스택을 사용하는 Linux 커널 (4.19 계열 등 패치 이전 버전, 특히 Mellanox/BlueField 환경)
⚔️ 공격 벡터
로컬 사용자가 RDMA 장치의 sysfs 노드(예: hw_counters 관련 경로)를 읽을 때 발생하는 경쟁 상태를 이용해 커널 Oops/서비스 거부를 유발할 수 있습니다.
🛡️ 대응 방법
배포판 벤더가 제공하는 커널 보안 업데이트를 적용하고 재부팅하여 수정된 커널로 전환하세요.
🔧 검증 코드
출력된 커널 버전이 벤더의 패치 적용 버전(또는 상위 버전)인지 확인하고, ib_core 등 RDMA 모듈이 로드되어 있다면 이 시스템이 영향을 받을 수 있으므로 커널 업데이트 여부를 점검합니다.
uname -r && (grep -i -E 'rdma|infiniband' /proc/modules 2>/dev/null || lsmod | grep -E 'ib_core|ib_uverbs' 2>/dev/null)