CVE-2024-53193 in Linux
要約
〜によって VulDB • 2026年08月08日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
clk: clk-loongson2: struct loongson2_clk_providerにおけるメモリ破壊バグの修正
`loongson2_clk_probe()`関数内では、複合構造体 `struct loongson2_clk_provider` を通じて、柔軟な配列メンバ `hws` を持つ柔軟な構造体 `struct clk_hw_onecell_data` に対してヒープ領域が割り当てられています。以下にその例を示します:
```c 289 struct loongson2_clk_provider *clp; ... 296 for (p = data; p->name; p++) 297 clks_num++; 298 299 clp = devm_kzalloc(dev, struct_size(clp, clk_data.hws, clks_num), 300 GFP_KERNEL); ```
その後、柔軟な配列にデータが書き込まれます:
```c 350 clp->clk_data.hws[p->id] = hw;
```
これにより、`struct loongson2_clk_provider` 内の `clk_data` メンバの直後に配置されているスピンロック変数 `clk_lock` が破壊されます。
```c struct loongson2_clk_provider {
void __iomem *base; struct device *dev; struct clk_hw_onecell_data clk_data; spinlock_t clk_lock; /* protect access to DIV registers */ }; ```
問題は、現在柔軟な構造体が `struct loongson2_clk_provider` の途中に配置されているのではなく、末尾にあるべきである点です。
この問題を修正するため、`struct clk_hw_onecell_data clk_data;` を `struct loongson2_clk_provider` の末尾へ移動します。また、将来構造体に新しいメンバが追加された場合にも同様の問題が発生しないよう防止するために、コードコメントを追加しました。
本変更により、以下の `-Wflex-array-member-not-at-end` 警告も修正されます:
``` drivers/clk/clk-loongson2.c:32:36: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
```
If you want to get best quality of vulnerability data, you may have to visit VulDB.