FAILED: patch "[PATCH] net: mana: fix use-after-free in add_adev() error path" failed to apply to 6.12-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x c4ea7d8907cf72b259bf70bd8c2e791e1c4ff70f
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026033041-unkind-wifi-8aa8@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From c4ea7d8907cf72b259bf70bd8c2e791e1c4ff70f Mon Sep 17 00:00:00 2001
From: Guangshuo Li <[email protected]>
Date: Tue, 24 Mar 2026 00:57:30 +0800
Subject: [PATCH] net: mana: fix use-after-free in add_adev() error path
If auxiliary_device_add() fails, add_adev() jumps to add_fail and calls auxiliary_device_uninit(adev).
The auxiliary device has its release callback set to adev_release(), which frees the containing struct mana_adev. Since adev is embedded in struct mana_adev, the subsequent fall-through to init_fail and access to adev->id may result in a use-after-free.
Fix this by saving the allocated auxiliary device id in a local variable before calling auxiliary_device_add(), and use that saved id in the cleanup path after auxiliary_device_uninit().
drivers/net/ethernet/microsoft/mana/mana_en.c +4 -2
@@ -3425,6 +3425,7 @@ static int add_adev(struct gdma_dev *gd, const char *name)struct auxiliary_device *adev;struct mana_adev *madev;int ret; +int id; madev =kzalloc_obj (*madev);if (!madev)
@@ -3434,7 +3435,8 @@ static int add_adev(struct gdma_dev *gd, const char *name) ret =mana_adev_idx_alloc ();if (ret <0 ) goto idx_fail; - adev->id = ret; + id = ret; + adev->id = id; adev->name = name; adev->dev.parent = gd->gdma_context->dev;
@@ -3460,7 +3462,7 @@ static int add_adev(struct gdma_dev *gd, const char *name)auxiliary_device_uninit (adev); init_fail: -mana_adev_idx_free (adev->id); +mana_adev_idx_free (id); idx_fail:kfree (madev);
Sasha Levin
maintainerPATCH 1/1 net: mana: fix use-after-free in add_adev() error path
From: Guangshuo Li <[email protected]>
[ Upstream commit c4ea7d8907cf72b259bf70bd8c2e791e1c4ff70f ]
If auxiliary_device_add() fails, add_adev() jumps to add_fail and calls auxiliary_device_uninit(adev).
The auxiliary device has its release callback set to adev_release(), which frees the containing struct mana_adev. Since adev is embedded in struct mana_adev, the subsequent fall-through to init_fail and access to adev->id may result in a use-after-free.
Fix this by saving the allocated auxiliary device id in a local variable before calling auxiliary_device_add(), and use that saved id in the cleanup path after auxiliary_device_uninit().
--- drivers/net/ethernet/microsoft/mana/mana_en.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/net/ethernet/microsoft/mana/mana_en.c +4 -2
@@ -2823,6 +2823,7 @@ static int add_adev(struct gdma_dev *gd)struct auxiliary_device *adev;struct mana_adev *madev;int ret; +int id; madev =kzalloc (sizeof (*madev),GFP_KERNEL );if (!madev)
@@ -2832,7 +2833,8 @@ static int add_adev(struct gdma_dev *gd) ret =mana_adev_idx_alloc ();if (ret <0 ) goto idx_fail; - adev->id = ret; + id = ret; + adev->id = id; adev->name ="rdma" ; adev->dev.parent = gd->gdma_context->dev;
@@ -2856,7 +2858,7 @@ static int add_adev(struct gdma_dev *gd)auxiliary_device_uninit (adev); init_fail: -mana_adev_idx_free (adev->id); +mana_adev_idx_free (id); idx_fail:kfree (madev);
Signature · 1 line
2.53.0