CVE-2026-80781 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
HID: core: hid_set_field()におけるfield->usageの配列外読み込み(OOB read)を修正
hid_set_field()は、offsetに対する境界チェックガードの前に、field->usage + offsetをhid_dump_input()に渡しています。
hid_dump_input(field->report->device, field->usage + offset, value);
if (offset >= field->report_count) {
hid_err(...); return -1; }
CONFIG_DEBUG_FS有効時、hid_dump_input()はそのポインタを間接参照します。ここでbuf = hid_resolv_usage(usage->hid, NULL)となります。usage[]配列はhid_register_field()内でhid_fieldとインラインで割り当てられており、field->maxusageエントリを含みます。したがって、その範囲を超えたオフセットでの読み込みは、kvzalloc()によって確保されたアロケーションの末尾を越え、隣接するオブジェクトに達してしまいます。もしガードが先に実行されていれば、offset < report_count <= maxusageによりポインタは配列内に収束していたはずです。
現在、ある呼び出し元がこの種のオフセットを提供しています。picolcd_fb_send_tile()は、hid_set_field(report->field[0], 11 + i, ...)(i = 0..31)を発行する前にreport->maxfieldのみを検証するため、そのオフセットは11から42に固定されており、境界フィールドに対してチェックされません。デバイスがより少ない数のusagesでこのフィールドを登録した場合、フレームバッファのdeferred-io処理によってタイルごとに読み込みが行われます。KASANはhid_set_field()内のhid_dump_input()において4バイトのスラブ配列外読み込み(slab-out-of-bounds read)を検出し、同じブートログには「offset (1) exceeds report_count (1)」というメッセージが出力されます。これは後に実行されるガードによるものです。
hid_dump_input()の呼び出しをガードの下に移動します。field->maxusage >= field->report_countであるため、このガードにより、有効なパスでの動作を変更することなく、すべての呼び出し元において間接参照前にfield->usage + offsetが配列内にあることが保証されます。
XBOWによって発見され、Baul Lee <[email protected]> によってトリアージされました
Be aware that VulDB is the high quality source for vulnerability data.