FAILED: patch "[PATCH] drm: adv7511: Fix use-after-free in adv7533_attach_dsi()" failed to apply to 5.15-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.15-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-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 81adbd3ff21c1182e06aa02c6be0bfd9ea02d8e8
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025010605-quit-rockfish-a0e8@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 81adbd3ff21c1182e06aa02c6be0bfd9ea02d8e8 Mon Sep 17 00:00:00 2001
From: Biju Das <[email protected]>
Date: Tue, 19 Nov 2024 19:20:29 +0000
Subject: [PATCH] drm: adv7511: Fix use-after-free in adv7533_attach_dsi()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The host_node pointer was assigned and freed in adv7533_parse_dt(), and later, adv7533_attach_dsi() uses the same. Fix this use-after-free issue by dropping of_node_put() in adv7533_parse_dt() and calling of_node_put() in error path of probe() and also in the remove().
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +8 -2
@@ -1241,8 +1241,10 @@ static int adv7511_probe(struct i2c_client *i2c)return ret; ret =adv7511_init_regulators (adv7511); -if (ret) -return dev_err_probe (dev, ret,"failed to init regulators\n" ); +if (ret) { +dev_err_probe (dev, ret,"failed to init regulators\n" ); + goto err_of_node_put; + }/* * The power down GPIO is optional. If present, toggle it from active to
@@ -1363,6 +1365,8 @@ static int adv7511_probe(struct i2c_client *i2c)i2c_unregister_device (adv7511->i2c_edid); uninit_regulators:adv7511_uninit_regulators (adv7511); +err_of_node_put: +of_node_put (adv7511->host_node);return ret; }
@@ -1371,6 +1375,8 @@ static void adv7511_remove(struct i2c_client *i2c) {struct adv7511 *adv7511 =i2c_get_clientdata (i2c); +of_node_put (adv7511->host_node); +adv7511_uninit_regulators (adv7511);drm_bridge_remove (&adv7511->bridge);
drivers/gpu/drm/bridge/adv7511/adv7533.c +0 -2
@@ -181,8 +181,6 @@ int adv7533_parse_dt(struct device_node *np, struct adv7511 *adv)if (!adv->host_node)return -ENODEV ; -of_node_put (adv->host_node); - adv->use_timing_gen = !of_property_read_bool (np,"adi,disable-timing-generator" );