Commit 14ad4c10 authored by Mario Limonciello (AMD)'s avatar Mario Limonciello (AMD) Committed by Greg Kroah-Hartman
Browse files

usb: typec: ucsi: Fix null pointer dereference in ucsi_sync_control_common



Add missing null check for cci parameter before dereferencing it in
ucsi_sync_control_common(). The function can be called with cci=NULL
from ucsi_acknowledge(), which leads to a null pointer dereference
when accessing *cci in the condition check.

The crash occurs because the code checks if cci is not null before
calling ucsi->ops->read_cci(ucsi, cci), but then immediately
dereferences cci without a null check in the following condition:
(*cci & UCSI_CCI_COMMAND_COMPLETE).

KASAN trace:
  KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
  RIP: 0010:ucsi_sync_control_common+0x2ae/0x4e0 [typec_ucsi]

Cc: stable <stable@kernel.org>
Fixes: 667ecac5 ("usb: typec: ucsi: return CCI and message from sync_control callback")
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarMario Limonciello (AMD) <superm1@kernel.org>
Link: https://patch.msgid.link/20251216122210.5457-1-superm1@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c8411791
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ int ucsi_sync_control_common(struct ucsi *ucsi, u64 command, u32 *cci)
	if (!ret && cci)
		ret = ucsi->ops->read_cci(ucsi, cci);

	if (!ret && ucsi->message_in_size > 0 &&
	if (!ret && cci && ucsi->message_in_size > 0 &&
	    (*cci & UCSI_CCI_COMMAND_COMPLETE))
		ret = ucsi->ops->read_message_in(ucsi, ucsi->message_in,
						 ucsi->message_in_size);