On Thu, 7 Apr 2022 17:37:55 -0700, Song Liu wrote:
On Mon, Mar 28, 2022 at 1:06 AM Xiaomeng Tong xiam0nd.tong@gmail.com wrote:
The bug is here: if (!rdev || rdev->desc_nr != nr) {
The list iterator value 'rdev' will *always* be set and non-NULL by rdev_for_each_rcu(), so it is incorrect to assume that the iterator value will be NULL if the list is empty or no element found (In fact, it will be a bogus pointer to an invalid struct object containing the HEAD). Otherwise it will bypass the check and lead to invalid memory access passing the check.
To fix the bug, use a new variable 'iter' as the list iterator, while using the original variable 'pdev' as a dedicated pointer to point to the found element.
Cc: stable@vger.kernel.org Fixes: 70bcecdb1534 ("amd-cluster: Improve md_reload_sb to be less error prone")
s/amd-cluster/md-cluster/
Have fixed it in PATCH v3, please check it. Thank you.
-- Xiaomeng Tong