| Title | LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性 |
|---|---|
| Summary | Linuxカーネルにおいて、以下の脆弱性を修正しました: ksmbdのsmb_grant_oplock()におけるuse-after-freeおよびNULL参照の問題です。smb_grant_oplock()はオープンロック公開シーケンスで2つの問題がありました。1) opinfoはadd_lease_global_list()が呼ばれる前にci-m_op_listに(opinfo_addを介して)リンクされます。もしadd_lease_global_list()が失敗した場合(kmallocがNULLを返す場合)、エラーパスでopinfoは__free_opinfo()を介してci-m_op_listにリンクされたまま解放されます。このため、m_op_listの同時読取者(opinfo_get_listやsmb_break_all_levII_oplockによる直接反復)が解放済みノードを参照してしまいます。2) opinfo-o_fpはadd_lease_global_list()がopinfoをグローバルリースリストに公開した後に割り当てられます。同時にfind_same_lease_key()がリースリストを巡回すると、o_fpがまだNULLの間にopinfo-o_fp-f_ciを参照してしまう可能性があります。この公開後の失敗を排除するために公開シークエンスを再構成して修正しました。具体的には、NULL参照を修正するためにリスト公開前にopinfo-o_fpを設定し、opinfo_add()の前にalloc_lease_table()でlease_tableを事前に確保してadd_lease_global_list()が公開後に失敗しないようにしました。また、もとのm_op_list公開順序(opinfo_addが先、リースリストが後)を維持して、same_client_has_lease()やopinfo_get_list()による同時オープンが進行中のグラントを認識できるようにしました。さらに、エラーパスでは__free_opinfo()の代わりにopinfo_put()を使用し、RCU遅延解放パスを利用するようにしました。これにはadd_lease_global_list()の分割と、事前確保済みlease_tableの受け取り、および失敗しなくなったことで戻り値をintからvoidに変更することも含まれます。 |
| Possible impacts | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| Solution | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| Publication Date | April 22, 2026, midnight |
| Registration Date | May 11, 2026, 11:01 a.m. |
| Last Update | May 11, 2026, 11:01 a.m. |
| CVSS3.0 : 緊急 | |
| Score | 9.8 |
|---|---|
| Vector | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Linux |
| Linux Kernel 6.12.78 以上 6.12.80 未満 |
| Linux Kernel 6.18.19 以上 6.18.21 未満 |
| Linux Kernel 6.19.9 以上 6.19.11 未満 |
| Linux Kernel 6.6.130 |
| Linux Kernel 7.0 |
| No | Changed Details | Date of change |
|---|---|---|
| 1 | [2026年05月11日] 掲載 |
May 11, 2026, 11:01 a.m. |
| Summary | In the Linux kernel, the following vulnerability has been resolved: ksmbd: fix use-after-free and NULL deref in smb_grant_oplock() smb_grant_oplock() has two issues in the oplock publication sequence: 1) opinfo is linked into ci->m_op_list (via opinfo_add) before 2) opinfo->o_fp is assigned after add_lease_global_list() publishes Fix by restructuring the publication sequence to eliminate post-publish - Set opinfo->o_fp before any list publication (fixes NULL deref). This also requires splitting add_lease_global_list() to take a |
|---|---|
| Publication Date | April 22, 2026, 11:16 p.m. |
| Registration Date | April 25, 2026, 4:05 a.m. |
| Last Update | April 27, 2026, 11:16 p.m. |