LinuxのLinux Kernelにおける誤った領域へのリソースの漏えいに関する脆弱性
タイトル LinuxのLinux Kernelにおける誤った領域へのリソースの漏えいに関する脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。media: i2c: max9286モジュールを削除するとカーネルoopsが発生します。この問題は、仮想アドレス000000aa00000094でのカーネルページング要求を処理できなかったことに起因します。Mem abort情報は以下の通りです。ESR=0x96000004、EC=0x25: DABT (現在EL)、IL=32ビット、SET=0、FnV=0、EA=0、S1PTW=0、FSC=0x04: レベル0の変換障害です。データアボート情報はISV=0、ISS=0x00000004、CM=0、WnR=0です。ユーザページテーブルは4kページ、48ビット仮想アドレスで、pgdp=0000000880d85000、pgd=0000000000000000、p4d=0000000000000000です。内部エラーとしては、Oops: 96000004 [#1] PREEMPT SMPが報告されています。モジュール連結中にはfsl_jr_uio、caam_jr、rng_core、libdes、caamkeyblob_desc、caamhash_desc、caamalg_desc、crypto_engine、max9271、authenc、crct10dif_ce、mxc_jpeg_encdecなどが含まれています。CPUは2で、PIDは713、コマンドはrmmodです。システムはTainted: G C 5.15.5-00057-gaebcd29c8ed7-dirty #5です。ハードウェア名はFreescale i.MX8QXP MEK (DT)で、pstateは80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)です。pcはi2c_mux_del_adapters+0x24/0xf0、lrはmax9286_remove+0x28/0xd0 [max9286]、spはffff800013a9bbf0です。OOPSの原因は、I2Cクライアントデータがもはやmax9286_privではなくv4l2_subdevを指していることです。この変更はmax9286_init()で実施され、その後v4l2_i2c_subdev_init()が呼ばれています。修正内容にはmax9286_remove()関数の修正が含まれており、混乱を避けるためmax9286_probe()内のi2c_set_clientdata()の呼び出しは削除されました。また、max9286_init()はi2c_get_clientdata()を使用せず、privへのポインタを取得できるように変更されています。

想定される影響 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

公表日 2025年2月26日0:00
登録日 2026年1月27日17:39
最終更新日 2026年1月27日17:39
CVSS3.0 : 重要
スコア 7.1
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
影響を受けるシステム
Linux
Linux Kernel 5.16 以上 5.17.14 未満
Linux Kernel 5.18 以上 5.18.3 未満
Linux Kernel 5.9 以上 5.15.46 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年01月27日]
  掲載
2026年1月27日17:39

NVD脆弱性情報
CVE-2022-49509
概要

In the Linux kernel, the following vulnerability has been resolved:

media: i2c: max9286: fix kernel oops when removing module

When removing the max9286 module we get a kernel oops:

Unable to handle kernel paging request at virtual address 000000aa00000094
Mem abort info:
ESR = 0x96000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x04: level 0 translation fault
Data abort info:
ISV = 0, ISS = 0x00000004
CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=0000000880d85000
[000000aa00000094] pgd=0000000000000000, p4d=0000000000000000
Internal error: Oops: 96000004 [#1] PREEMPT SMP
Modules linked in: fsl_jr_uio caam_jr rng_core libdes caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine max9271 authenc crct10dif_ce mxc_jpeg_encdec
CPU: 2 PID: 713 Comm: rmmod Tainted: G C 5.15.5-00057-gaebcd29c8ed7-dirty #5
Hardware name: Freescale i.MX8QXP MEK (DT)
pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : i2c_mux_del_adapters+0x24/0xf0
lr : max9286_remove+0x28/0xd0 [max9286]
sp : ffff800013a9bbf0
x29: ffff800013a9bbf0 x28: ffff00080b6da940 x27: 0000000000000000
x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
x23: ffff000801a5b970 x22: ffff0008048b0890 x21: ffff800009297000
x20: ffff0008048b0f70 x19: 000000aa00000064 x18: 0000000000000000
x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
x14: 0000000000000014 x13: 0000000000000000 x12: ffff000802da49e8
x11: ffff000802051918 x10: ffff000802da4920 x9 : ffff000800030098
x8 : 0101010101010101 x7 : 7f7f7f7f7f7f7f7f x6 : fefefeff6364626d
x5 : 8080808000000000 x4 : 0000000000000000 x3 : 0000000000000000
x2 : ffffffffffffffff x1 : ffff00080b6da940 x0 : 0000000000000000
Call trace:
i2c_mux_del_adapters+0x24/0xf0
max9286_remove+0x28/0xd0 [max9286]
i2c_device_remove+0x40/0x110
__device_release_driver+0x188/0x234
driver_detach+0xc4/0x150
bus_remove_driver+0x60/0xe0
driver_unregister+0x34/0x64
i2c_del_driver+0x58/0xa0
max9286_i2c_driver_exit+0x1c/0x490 [max9286]
__arm64_sys_delete_module+0x194/0x260
invoke_syscall+0x48/0x114
el0_svc_common.constprop.0+0xd4/0xfc
do_el0_svc+0x2c/0x94
el0_svc+0x28/0x80
el0t_64_sync_handler+0xa8/0x130
el0t_64_sync+0x1a0/0x1a4

The Oops happens because the I2C client data does not point to
max9286_priv anymore but to v4l2_subdev. The change happened in
max9286_init() which calls v4l2_i2c_subdev_init() later on...

Besides fixing the max9286_remove() function, remove the call to
i2c_set_clientdata() in max9286_probe(), to avoid confusion, and make
the necessary changes to max9286_init() so that it doesn't have to use
i2c_get_clientdata() in order to fetch the pointer to priv.

公表日 2025年2月26日16:01
登録日 2025年2月27日4:02
最終更新日 2025年2月26日16:01
関連情報、対策とツール
共通脆弱性一覧