製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける到達可能なアサーションに関する脆弱性
Title LinuxのLinux Kernelにおける到達可能なアサーションに関する脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました:drbdのdrbd_al_begin_io_nonblock()関数に存在した「LOGIC BUG」です。device-al_lockスピンロックを保持しながらlc_get_cumulative()が実行可能か確認していたにもかかわらず、他のコード経路が悪いタイミングでlc_try_lock()を実行すると失敗する可能性がありました。その場合、「LOGIC BUG for enr=...」というログが記録されましたが、エラーは返されませんでした。後続のコードは、このリクエストが関連するアクティビティログ範囲に対する参照を持っていると仮定していました。これにより、アクティブなリシンク中にリシンクとアプリケーションIOの相互排他性が保証されず、潜在的なクラッシュが発生した際にはこれらの範囲が進行中のIOの対象である可能性に気づかず、念のため再同期が必要になる恐れがありました。また、リクエスト完了後にアクティビティログの参照を持っていないにもかかわらず解放しようとしたため、lc_put()内でBUG_ON(refcnt == 0)が発生していました。修正内容としては、通常の動作中に無害な条件でカーネルがクラッシュしないように、非アクティブ範囲に対してal_complete_io()が呼び出された際の警告時に「e == NULL」だけでなく「e-refcnt == 0」も検知するよう改良しました。また、動作するかどうかを賢く「推測」して失敗に驚くのではなく、動作の可否を正しく扱うようにしました。動作しない場合は、(拡張境界を跨ぐリクエストにのみ可能な)「部分的にアクティビティログにある」状態を記憶し、drbd_al_begin_io_nonblock()からエラーコードを返します。同じリクエストの後続呼び出しは中断した箇所から再開されます。

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

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

Publication Date March 25, 2026, midnight
Registration Date April 27, 2026, 10:55 a.m.
Last Update April 27, 2026, 10:55 a.m.
CVSS3.0 : 警告
Score 5.5
Vector CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Affected System
Linux
Linux Kernel 3.10
Linux Kernel 3.10.1 以上 5.10.253 未満
Linux Kernel 5.11 以上 5.15.203 未満
Linux Kernel 5.16 以上 6.1.167 未満
Linux Kernel 6.13 以上 6.18.17 未満
Linux Kernel 6.19 以上 6.19.7 未満
Linux Kernel 6.2 以上 6.6.130 未満
Linux Kernel 6.7 以上 6.12.77 未満
Linux Kernel 7.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年04月27日]
  掲載
April 27, 2026, 10:55 a.m.

NVD Vulnerability Information
CVE-2026-23356
Summary

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

drbd: fix "LOGIC BUG" in drbd_al_begin_io_nonblock()

Even though we check that we "should" be able to do lc_get_cumulative()
while holding the device->al_lock spinlock, it may still fail,
if some other code path decided to do lc_try_lock() with bad timing.

If that happened, we logged "LOGIC BUG for enr=...",
but still did not return an error.

The rest of the code now assumed that this request has references
for the relevant activity log extents.

The implcations are that during an active resync, mutual exclusivity of
resync versus application IO is not guaranteed. And a potential crash
at this point may not realizs that these extents could have been target
of in-flight IO and would need to be resynced just in case.

Also, once the request completes, it will give up activity log references it
does not even hold, which will trigger a BUG_ON(refcnt == 0) in lc_put().

Fix:

Do not crash the kernel for a condition that is harmless during normal
operation: also catch "e->refcnt == 0", not only "e == NULL"
when being noisy about "al_complete_io() called on inactive extent %u\n".

And do not try to be smart and "guess" whether something will work, then
be surprised when it does not.
Deal with the fact that it may or may not work. If it does not, remember a
possible "partially in activity log" state (only possible for requests that
cross extent boundaries), and return an error code from
drbd_al_begin_io_nonblock().

A latter call for the same request will then resume from where we left off.

Summary

En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:

drbd: corrige el 'LOGIC BUG' en drbd_al_begin_io_nonblock()

Aunque verificamos que "deberíamos" poder hacer lc_get_cumulative() mientras mantenemos el spinlock device->al_lock, aún puede fallar, si alguna otra ruta de código decidió hacer lc_try_lock() con una sincronización deficiente.

Si eso sucedía, registrábamos 'LOGIC BUG for enr=...', pero aún así no devolvíamos un error.

El resto del código ahora asumía que esta solicitud tiene referencias para las extensiones de registro de actividad relevantes.

Las implicaciones son que durante una resincronización activa, la exclusividad mutua de la resincronización frente a la E/S de la aplicación no está garantizada. Y un posible fallo en este punto podría no darse cuenta de que estas extensiones podrían haber sido objetivo de E/S en curso y necesitarían ser resincronizadas por si acaso.

Además, una vez que la solicitud se completa, liberará referencias del registro de actividad que ni siquiera posee, lo que activará un BUG_ON(refcnt == 0) en lc_put().

Solución:

No bloquear el kernel por una condición inofensiva durante el funcionamiento normal: también capturar 'e->refcnt == 0', no solo 'e == NULL' al ser ruidoso sobre 'al_complete_io() called on inactive extent %u\n'.

Y no intentar ser inteligente y "adivinar" si algo funcionará, para luego sorprenderse cuando no lo haga.
Afrontar el hecho de que puede o no funcionar. Si no funciona, recordar un posible estado de 'parcialmente en el registro de actividad' (solo posible para solicitudes que cruzan límites de extensión), y devolver un código de error desde drbd_al_begin_io_nonblock().

Una llamada posterior para la misma solicitud se reanudará desde donde lo dejamos.

Publication Date March 25, 2026, 8:16 p.m.
Registration Date April 27, 2026, 12:18 p.m.
Last Update April 25, 2026, 4:06 a.m.
Affected software configurations
Configuration1 or higher or less more than less than
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 3.10.1 5.10.253
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 5.15.203
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 6.1.167
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 6.6.130
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 6.12.77
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.13 6.18.17
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.19 6.19.7
cpe:2.3:o:linux:linux_kernel:3.10:-:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:*
Related information, measures and tools
Common Vulnerabilities List