bus: fsl-mc-bus: fix KASAN use-after-free in fsl_mc_bus_remove()
commit928ea98252
upstream. In fsl_mc_bus_remove(), mc->root_mc_bus_dev->mc_io is passed to fsl_destroy_mc_io(). However, mc->root_mc_bus_dev is already freed in fsl_mc_device_remove(). Then reference to mc->root_mc_bus_dev->mc_io triggers KASAN use-after-free. To avoid the use-after-free, keep the reference to mc->root_mc_bus_dev->mc_io in a local variable and pass to fsl_destroy_mc_io(). This patch needs rework to apply to kernels older than v5.15. Fixes:f93627146f
("staging: fsl-mc: fix asymmetry in destroy of mc_io") Cc: stable@vger.kernel.org # v5.15+ Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> Link: https://lore.kernel.org/r/20220601105159.87752-1-shinichiro.kawasaki@wdc.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
9b5a3b16c4
Коммит
ccd1751092
|
@ -1236,14 +1236,14 @@ error_cleanup_mc_io:
|
|||
static int fsl_mc_bus_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct fsl_mc *mc = platform_get_drvdata(pdev);
|
||||
struct fsl_mc_io *mc_io;
|
||||
|
||||
if (!fsl_mc_is_root_dprc(&mc->root_mc_bus_dev->dev))
|
||||
return -EINVAL;
|
||||
|
||||
mc_io = mc->root_mc_bus_dev->mc_io;
|
||||
fsl_mc_device_remove(mc->root_mc_bus_dev);
|
||||
|
||||
fsl_destroy_mc_io(mc->root_mc_bus_dev->mc_io);
|
||||
mc->root_mc_bus_dev->mc_io = NULL;
|
||||
fsl_destroy_mc_io(mc_io);
|
||||
|
||||
bus_unregister_notifier(&fsl_mc_bus_type, &fsl_mc_nb);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче