usb: typec: Fix error pointer dereference
Subsystems (2)
PATCH 1/1 usb: typec: Fix error pointer dereference
The variable tps->partner is checked for an error pointer and then if it is, it sends an error message but does not return and then immediately dereferenced a few lines below:
tps->partner = typec_register_partner(tps->port, &desc); if (IS_ERR(tps->partner))
dev_warn(tps->dev, "%s: failed to register partnet\n", __func__);
if (desc.identity) {
typec_partner_set_identity(tps->partner);
cd321x->cur_partner_identity = st.partner_identity;
}Add early return and fix spelling mistake in error message.
Detected by Smatch:drivers/usb/typec/tipd/core.c:827 cd321x_update_work() error:
'tps->partner' dereferencing possible ERR_PTR()
--- drivers/usb/typec/tipd/core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/usb/typec/tipd/core.c +4 -2
@@ -820,8 +820,10 @@ static void cd321x_update_work(struct work_struct *work) desc.identity = &st.partner_identity; tps->partner =typec_register_partner (tps->port, &desc); -if (IS_ERR (tps->partner)) -dev_warn (tps->dev,"%s: failed to register partnet\n" , __func__); +if (IS_ERR (tps->partner)) { +dev_warn (tps->dev,"%s: failed to register partner\n" , __func__); +return ; + }if (desc.identity) {typec_partner_set_identity (tps->partner);
Signature · 1 line
2.53.0
Quoted 13 lines · Ethan Tidmore
The variable
tps->partneris checked for an error pointer and then if it is, it sends an error message but does not return and then immediately dereferenced a few lines below:
tps->partner=typec_register_partner(tps->port, &desc); if (IS_ERR(tps->partner))dev_warn(tps->dev, "%s: failed to register partnet\n", __func__);if (desc.identity) { typec_partner_set_identity(tps->partner); cd321x->cur_partner_identity = st.partner_identity; }
Quoted 8 lines
Add early return and fix spelling mistake in error message.
Detected by Smatch:
drivers/usb/typec/tipd/core.c:827cd321x_update_work()error:
'tps->partner' dereferencing possibleERR_PTR()Fixes 82432bbfb9e83 ("usb: typec: tipd: Handle mode transitions for CD321x")Signed-off-by Ethan Tidmore <[email protected]>
Quoted 23 lines
--- drivers/usb/typec/tipd/core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)drivers/usb/typec/tipd/core.c +4
-2@@ -820,8 +820,10 @@ static void cd321x_update_work(struct work_struct *work) desc.identity = &st.partner_identity; tps->partner =typec_register_partner (tps->port, &desc); -if (IS_ERR (tps->partner)) -dev_warn (tps->dev,"%s: failed to register partnet\n" , __func__); +if (IS_ERR (tps->partner)) { +dev_warn (tps->dev,"%s: failed to register partner\n" , __func__); +return ; + }if (desc.identity) {typec_partner_set_identity (tps->partner);Signature · 1 line
2.53.0
Signature · 1 line
heikki