CVE-2025-21899 in Linux
要約
〜によって VulDB • 2026年06月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
tracing: 壊れたnamed_triggersリストへの悪影響を是正する
次のコマンドを実行するとクラッシュが発生します:
~# cd /sys/kernel/tracing/events/rcu/rcu_callback ~# echo 'hist:name=bad:keys=common_pid:onmax(bogus).save(common_pid)' > trigger bash: echo: write error: Invalid argument ~# echo 'hist:name=bad:keys=common_pid' > trigger
これは以下の理由によります:
event_trigger_write() {
trigger_process_regex() {
event_hist_trigger_parse() {
data = event_trigger_alloc(..);
event_trigger_register(.., data) {
cmd_ops->reg(.., data, ..) [hist_register_trigger()] {
data->ops->init() [event_hist_trigger_init()] {
save_named_trigger(name, data) {
list_add(&data->named_list, &named_triggers); } } } }
ret = create_actions(); (return -EINVAL) if (ret) goto out_unreg; [..]
ret = hist_trigger_enable(data, ...) {
list_add_tail_rcu(&data->list, &file->triggers); <<<---- スキップされる!!!(これが重要!) [..]
out_unreg: event_hist_unregister(.., data) {
cmd_ops->unreg(.., data, ..) [hist_unregister_trigger()] {
list_for_each_entry(iter, &file->triggers, list) {
if (!hist_trigger_match(data, iter, named_data, false)) <- 一致しない continue; [..]
test = iter; } if (test && test->ops->free) <<<-- testはNULL
test->ops->free(test) [event_hist_trigger_free()] {
[..]
if (data->name) del_named_trigger(data) {
list_del(&data->named_list); <<<<-- 削除されない! } } } }
[..]
kfree(data); <<<-- アイテムを解放するが、リストにはまだ残っている
次に名前付きのhistトリガーが登録されると、u-a-f(Use-After-Free)バグが発生し、カーネルがクラッシュします。
コードの順序を変更し、event_trigger_register() が成功した場合、次呼び出されるのは hist_trigger_enable() であり、これがリストに追加するようにしました。
get_named_trigger_data() が false を返す場合、一連のアクションが呼び出されます。しかし、これは event_trigger_register() の後に呼び出す必要はないため、前に移動することができ、event_trigger_register() と hist_trigger_enable() を隣接させて呼び出すことで、file->triggers が適切に設定されるようにします。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.