CVE-2026-80772 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
HID: nintendo: joycon_ctlr_read_handler()における配列外読み込み(out-of-bounds read)の修正
joycon_ctlr_read_handler()は、受信したHID入力レポートをstruct joycon_input_reportにキャストして解析しますが、このキャストには12バイトという長さチェックのみでガードがかけられています:
if (size >= 12) /* make sure it contains the input report */ joycon_parse_report(ctlr, (struct joycon_input_report *)data);
struct joycon_input_reportのサイズは49バイトです。これは、13バイトのヘッダーに続き、IMUアーム部分が36バイトであるunionから構成されています。IMUレポートの場合、joycon_parse_report() -> joycon_parse_imu_report()はこのunion(構造体オフセット 13..48)を走査するため、データ[0] == JC_INPUT_IMU_DATAであり長さがちょうど12バイトのレポートはガード条件を満たしますが、宣言された長さから最大37バイト分を超えて読み込まれます。この過剰に読み込まれたバイトは加速度計/ジャイロスコープ値としてデコードされ、「(IMU)」入力デバイスを通じてユーザー空間へ転送されるため、ドライバ内部メモリが漏洩します。データ[0]とsizeは、悪意のあるまたはなりすましJoy-Con/Proコントローラによって完全に制御可能です。
受信バッファのサイズは最大レポート長に合わせて設定されているため、これはスラブ(slab)領域における配列外アクセスではなく、割り当てられたメモリ内での過剰読み込みですが、デコードされたバイト値は依然としてユーザー空間に到達します。
joycon_ctlr_handle_event()内の兄弟となるsubcmdパスでは、同じキャストに対して正しい境界チェックが既に適用されています:
if (size < sizeof(struct joycon_input_report) || data[0] != JC_INPUT_SUBCMD_REPLY)
break;
ここではsizeof(struct joycon_input_report)による境界チェックを同様に使用します。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.