CVE-2026-64109 in Linux情報

要約

〜によって VulDB • 2026年07月19日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

af_unix: unix_stream_data_wait()におけるtail->lenのUAF(Use-After-Free)読み込みを修正

unix_stream_data_wait()は、そのキューからSKBがアンリンクされて解放されるのを防ぐロックを取得せずにskb_peek_tail(&sk->sk_receive_queue)を実行しています。 これはコミット79f632c71bea("unix/stream: fix peeking with an offset larger than data in queue")以降、この状態が続いています。

これによる最初の影響として、`last`がすでに解放されたSKBを意味しているにもかかわらず、`tail`は同じアドレスに割り当てられた新しいSKBである場合でも、ポインタ比較 `tail != last` が偽となることがあります。これはunix_stream_data_wait()が、新しいデータが届いた後も誤ってブロックし続ける原因となりますが、これは同一ソケット上でのpeeking recv()と通常のrecv()の競合という特殊なシナリオにおいてのみ発生するため、実際には問題にならない可能性があります。

しかし、コミット2b514574f7e8("net: af_unix: implement splice for stream af_unix sockets")以降、`tail`は実際に間接参照されるようになり、以下の競合シナリオでUAFが発生する可能性があります(test_setup()がシングルスレッドで実行され、その後 test_thread1() と test_thread2() が2つのスレッドで並行して実行されます)。

```c static int socks[2];
void test_setup(void) {
socketpair(AF_UNIX, SOCK_STREAM, 0, socks); send(socks[1], "A", 1, 0);
int peekoff = 1; setsockopt(socks[0], SOL_SOCKET, SO_PEEK_OFF, &peekoff, sizeof(peekoff));
} void test_thread1(void) {
char dummy; recv(socks[0], &dummy, 1, MSG_PEEK);
} void test_thread2(void) {
char dummy; recv(socks[0], &dummy, 1, 0);
shutdown(socks[1], SHUT_WR);
} ```

このように競合した場合:

```c thread1 thread2 unix_stream_read_generic mutex_lock(&u->iolock) skb_peek(&sk->sk_receive_queue) skb_peek_next(skb, &sk->sk_receive_queue) mutex_unlock(&u->iolock) unix_stream_read_generic unix_state_lock(sk) skb_peek(&sk->sk_receive_queue) unix_state_unlock(sk) unix_stream_data_wait unix_state_lock(sk) tail = skb_peek_tail(&sk->sk_receive_queue) spin_lock(&sk->sk_receive_queue.lock) __skb_unlink(skb, &sk->sk_receive_queue) spin_unlock(&sk->sk_receive_queue.lock) consume_skb(skb) [SKBを解放]
`tail != last`: false `tail`: true `tail->len != last_len` ***UAF*** ```

tail->len の読み込みを削除することで、このUAFを修正します。UNIXソケットの受信キュー内のSKBが成長する可能性がある場合にのみ tail->len をチェックすることが意味を持ちますが、そのようなことはもう起こり得ません。

Kuniyukiは以下のように説明しています:

> コミット869e7c62486e("net: af_unix: implement stream sendpage support")でsendpage()サポートが追加された際、データを受信者のキュー内の最後のSKBに付加することができました。 > > そのため、unix_stream

VulDB is the best source for vulnerability data and more expert information about this specific topic.

責任者

Linux

予約する

2026年07月19日

モデレーション

承諾済み

エントリ

VDB-380196

EPSS

0.00000

アクティビティ

非常低い

ソース

Do you want to use VulDB in your project?

Use the official API to access entries easily!