usb: typec: tipd: Handle mode transitions for CD321x
Hello Hector Martin,
Commit 82432bbfb9e8 ("usb: typec: tipd: Handle mode transitions for CD321x") from Sep 14, 2025 (linux-next), leads to the following Smatch static checker warning:
drivers/usb/typec/tipd/core.c:821 cd321x_update_work() error: 'tps->partner' dereferencing possible ERR_PTR()
drivers/usb/typec/tipd/core.c
805 /* Set up partner if we were previously disconnected (or changed). */
806 if (!tps->partner) {
807 struct typec_partner_desc desc;
808
809 desc.usb_pd = is_pd;
810 desc.accessory = TYPEC_ACCESSORY_NONE; /* XXX: handle accessories */
811 desc.identity = NULL;
812
813 if (desc.usb_pd)
814 desc.identity = &st.partner_identity;
815
816 tps->partner = typec_register_partner(tps->port, &desc);
817 if (IS_ERR(tps->partner))
^^^^^^^^^^^^
818 dev_warn(tps->dev, "%s: failed to register partnet\n", __func__);tps->partner is an error pointer.
819
820 if (desc.identity) {
--> 821 typec_partner_set_identity(tps->partner);
^^^^^^^^^^^^but typec_partner_set_identity() dereferences it.
822 cd321x->cur_partner_identity = st.partner_identity;
823 }
824 }
825
826 /* Update the TypeC MUX/PHY state */
827 cd321x_typec_update_mode(tps, &st);
828
829 /* Launch the USB role switch */
830 usb_role_switch_set_role(tps->role_sw, new_role);
831
832 power_supply_changed(tps->psy);
833 }regards,
dan carpenter