The pointer 'adev' was being dereferenced before being checked for NULL in the 'type_alt mode_enter()' and 'type_alt mode_exit()' functions. Although this is a hypothetical issue, it's better to move the pointer assignment after the NULL check to avoid any potential problems. Found by Linux Verification Center with Svace static analyzer. Fixes: 8a37d87d72f0 ("usb: typec: Bus type for alternate modes") Signed-off-by: Maxim Korotkov <korotkov.maxim.s@xxxxxxxxx> --- drivers/usb/typec/bus.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c index 098f0efaa58d..ae0aca8f33db 100644 --- a/drivers/usb/typec/bus.c +++ b/drivers/usb/typec/bus.c @@ -125,13 +125,16 @@ EXPORT_SYMBOL_GPL(typec_altmode_notify); */ int typec_altmode_enter(struct typec_altmode *adev, u32 *vdo) { - struct altmode *partner = to_altmode(adev)->partner; - struct typec_altmode *pdev = &partner->adev; + struct altmode *partner; + struct typec_altmode *pdev; int ret; if (!adev || adev->active) return 0; + partner = to_altmode(adev)->partner; + pdev = &partner->adev; + if (!pdev->ops || !pdev->ops->enter) return -EOPNOTSUPP; @@ -156,13 +159,15 @@ EXPORT_SYMBOL_GPL(typec_altmode_enter); */ int typec_altmode_exit(struct typec_altmode *adev) { - struct altmode *partner = to_altmode(adev)->partner; - struct typec_altmode *pdev = &partner->adev; + struct altmode *partner; + struct typec_altmode *pdev; int ret; if (!adev || !adev->active) return 0; + partner = to_altmode(adev)->partner; + pdev = &partner->adev; if (!pdev->ops || !pdev->ops->exit) return -EOPNOTSUPP; -- 2.37.2