Linuxカーネルにおいて、以下の脆弱性が修正されました。ALSAのcontrolサブシステムで、snd_ctl_elem_init_enum_names()関数内でstrnlen()を呼び出す前にbuf_lenを検証する処理が追加されました。snd_ctl_elem_init_enum_names()はnamesバッファ内でポインタpを進めながらbuf_lenを減算しますが、buf_lenが0になったにもかかわらずアイテムが残っている場合、次のループでstrnlen(p, 0)が呼ばれます。strnlen(p, 0)は0を返して既存のname_len == 0のエラーパスに入りますが、CONFIG_FORTIFY_SOURCEの強化されたstrnlen()は最初にmaxlenを__builtin_dynamic_object_size()と比較します。Clangがループ内でpのオブジェクトサイズを追跡できなくなると、返り値を調べる前にBRK例外のパニックが発生します。使い尽くされたバッファで強化されたstrnlen()を呼ばないように、ループの入り口でbuf_len == 0であることを確認するガードが追加されました。この脆弱性はXiaomiスマートフォンを用いたカーネルファズテストで発見されました。
|