| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2024-49983: ext4: drop ppath from ext4_ext_replay_update_ex() to avoid double-free |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| ext4: drop ppath from ext4_ext_replay_update_ex() to avoid double-free |
| |
| When calling ext4_force_split_extent_at() in ext4_ext_replay_update_ex(), |
| the 'ppath' is updated but it is the 'path' that is freed, thus potentially |
| triggering a double-free in the following process: |
| |
| ext4_ext_replay_update_ex |
| ppath = path |
| ext4_force_split_extent_at(&ppath) |
| ext4_split_extent_at |
| ext4_ext_insert_extent |
| ext4_ext_create_new_leaf |
| ext4_ext_grow_indepth |
| ext4_find_extent |
| if (depth > path[0].p_maxdepth) |
| kfree(path) ---> path First freed |
| *orig_path = path = NULL ---> null ppath |
| kfree(path) ---> path double-free !!! |
| |
| So drop the unnecessary ppath and use path directly to avoid this problem. |
| And use ext4_find_extent() directly to update path, avoiding unnecessary |
| memory allocation and freeing. Also, propagate the error returned by |
| ext4_find_extent() instead of using strange error codes. |
| |
| The Linux kernel CVE team has assigned CVE-2024-49983 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 5.10.227 with commit 8c26d9e53e5fbacda0732a577e97c5a5b7882aaf |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 5.15.168 with commit a34bed978364114390162c27e50fca50791c568d |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 6.1.113 with commit 6367d3f04c69e2b8770b8137bd800e0784b0abbc |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 6.6.55 with commit 1b558006d98b7b0b730027be0ee98973dd10ee0d |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 6.10.14 with commit 3ff710662e8d86a63a39b334e9ca0cb10e5c14b0 |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 6.11.3 with commit 63adc9016917e6970fb0104ee5fd6770f02b2d80 |
| Issue introduced in 5.10 with commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2 and fixed in 6.12 with commit 5c0f4cc84d3a601c99bc5e6e6eb1cbda542cce95 |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2024-49983 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| fs/ext4/extents.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/8c26d9e53e5fbacda0732a577e97c5a5b7882aaf |
| https://git.kernel.org/stable/c/a34bed978364114390162c27e50fca50791c568d |
| https://git.kernel.org/stable/c/6367d3f04c69e2b8770b8137bd800e0784b0abbc |
| https://git.kernel.org/stable/c/1b558006d98b7b0b730027be0ee98973dd10ee0d |
| https://git.kernel.org/stable/c/3ff710662e8d86a63a39b334e9ca0cb10e5c14b0 |
| https://git.kernel.org/stable/c/63adc9016917e6970fb0104ee5fd6770f02b2d80 |
| https://git.kernel.org/stable/c/5c0f4cc84d3a601c99bc5e6e6eb1cbda542cce95 |