Linux の作成者である Linus Torvalds は、最近では以前ほど実際のカーネル コードを書かなくなりました。最近、彼はコードのレビュー、リリースの管理、メーリング リストのディスカッションへの参加など、上流のカーネル開発コミュニティの監督で忙しいことが多いです。ただし、現在 Linux 6.5 でユーザー モード スタック拡張コードの改善を行っているのと同じように、彼は低レベルのカーネル ハッキングに手を染めることもあります。
500 行弱のコードの手直しは、ユーザー モードのスタック拡張ビットを改良するためのものです。彼はマージの中で次のように説明しました。
これにより、VM レイアウトを変更する前に書き込みのために常に mmap_lock を取得するようにユーザー モード スタック拡張コードが変更されます。
実際には、これは技術的に常に行うべきことだったのですが、厳密には必要ではなかったために、物事について怠けていたため (「ご都合主義」という表現のほうがはるかに良いですね)、このハックが組み込まれていました。適切なロックを行わずにスタック vma をインプレースで拡張する場所。
そして、それはうまくいきました。 vm_start (成長スタックの場合は vm_end) を変更する必要があるだけで、anon_vma ロックと mm->page_table_lock を使用した特別なアドホック ロックを組み合わせることで、すべてが非常に簡単でした。
つまり、ルイハンまでは大丈夫でしたLi 氏は、vma レイアウトでメープル ツリー コードが使用されているため、*本当に* もう vm_start と vm_end を変更するだけではなく、ロックが実際に壊れていると指摘しました。おっと。
これをきっぱり修正して適切にロックすることは実際にはそれほど恐ろしいことではありませんが、少し面倒です。スタック拡張には基本的に 3 つの異なるケースがあり、それらはすべて少しずつ動作が異なります。
Linux 6.5 では、Linus Torvalds が自らコーディングに挑戦したおかげで、この問題は解決されるはずです。詳細については、マージをご覧ください。