CVE-2022-49771 in Linux情報

要約

〜によって VulDB • 2026年07月13日

Linuxカーネルにおいて、以下の脆弱性が修正されました。

dm ioctl: モジュール読み込みとの競合時に発生する誤動作の修正

__list_versionsはまず、「dm_target_iterate(list_version_get_needed, &needed)」呼び出しを使用して必要なスペースを見積もり、次に「dm_target_iterate(list_version_get_info, &iter_info)」呼び出しを使用してそのスペースにデータを埋めます。これらの各呼び出しでは、「down_read(&_lock)」および「up_read(&_lock)」呼び出しを用いてターゲットがロックされます。しかし、最初の「dm_target_iterate」と2番目の「dm_target_iterate」の間にはロックが保持されず、この時点でターゲットモジュールを読み込むことができるため、2番目の「dm_target_iterate」呼び出しは、最初の「dm_target_iterate」で返された値よりも多くのスペースを必要とする可能性があります。

コードはこのオーバーフローの処理を試みていますが(list_version_get_infoの冒頭参照)、その処理が正しくありません。

コードでは、「param->data_size = param->data_start + needed」と「iter_info.end = (char *)vers+len」が設定されます。「needed」は最初のdm_target_iterate呼び出しで返されたサイズであり、「len」はユーザー空間によって割り当てられたバッファのサイズです。

「len」が「needed」より大きい場合があります。この場合、コードは最大「len」バイトをバッファに書き込みますが、param->data_sizeは「needed」に設定されているため、param->data_sizeの値を超えてデータを書き込む可能性があります。ioctlインターフェースはユーザー空間へparam->data_sizeまでのみコピーするため、結果の一部が切り捨てられます。

このバグを修正するために、「iter_info.end = (char *)vers + needed;」を設定します。これにより、2番目の「dm_target_iterate」呼び出しが「needed」バッファまでしか書き込まないことが保証され、もし「needed」スペースを超えてオーバーフローした場合は「DM_BUFFER_FULL_FLAG」で終了します。この場合、ユーザー空間はより大きなバッファを割り当てて再試行します。

なお、list_version_get_neededにもバグがあります。「strlen(tt->name)」ではなく、「strlen(tt->name) + 1」を必要なサイズに追加する必要があります。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Linux

予約する

2025年04月16日

モデレーション

承諾済み

エントリ

VDB-306927

EPSS

0.00137

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!