Linuxカーネルにおいて、以下の脆弱性が修正されました。入力デバイス:synaptics-rmi4 - F30キーマップはGPIO/LEDのカウント数に制限されます。rmi_f30_map_gpios()関数は gpioled_key_map を min(gpioled_count, TRACKSTICK_RANGE_END) に基づき最大6エントリ分割り当てますが、rmi_f30_attention()関数はデバイスクエリレジスタの範囲0..31である f30->gpioled_count 全体を反復し、gpioled_key_map[i]を参照します。さらに、input->keycodemax は gpioled_count 全体に設定されますが、input->keycodeは6エントリ分のメモリ領域を指しています。そのため、GPIOサポートが有効で gpioled_count が6を超えることを報告するデバイスでは、attention割り込み時に境界外読み取りが発生し、EVIOCGKEYCODE/EVIOCSKEYCODE ioctl呼び出しで境界外の読み書きが引き起こされます。これらのioctlはインデックスを keycodemax のみで検証しています。この問題は、F30からコピーされたF3Aハンドラと同じ欠陥によるものです。対応として、keymapのサイズを gpioled_count 全体に合わせて確保します。ただし、マッピングループでは引き続き最初の min(gpioled_count, TRACKSTICK_RANGE_END) のエントリにのみ割り当てを行います。
|