mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
UPSTREAM: usb: typec: ucsi: Fix command cancellation
The Cancel command was passed to the write callback as the offset instead of as the actual command which caused NULL pointer dereference. Reported-by: Stephan Bolten <stephan.bolten@gmx.net> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217517 Fixes:094902bc6a("usb: typec: ucsi: Always cancel the command if PPM reports BUSY condition") Cc: stable@vger.kernel.org Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Message-ID: <20230606115802.79339-1-heikki.krogerus@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Bug: 298597334 Change-Id: I7f23e49c58b566f462ba34f76966db662308a5bc (cherry picked from commitc4a8bfabef) Signed-off-by: Udipto Goswami <quic_ugoswami@quicinc.com>
This commit is contained in:
committed by
Udipto Goswami
parent
0c34d588af
commit
b15c3a3df0
@@ -132,10 +132,8 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (cci & UCSI_CCI_BUSY) {
|
||||
ucsi->ops->async_write(ucsi, UCSI_CANCEL, NULL, 0);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (cmd != UCSI_CANCEL && cci & UCSI_CCI_BUSY)
|
||||
return ucsi_exec_command(ucsi, UCSI_CANCEL);
|
||||
|
||||
if (!(cci & UCSI_CCI_COMMAND_COMPLETE))
|
||||
return -EIO;
|
||||
@@ -149,6 +147,11 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
|
||||
return ucsi_read_error(ucsi);
|
||||
}
|
||||
|
||||
if (cmd == UCSI_CANCEL && cci & UCSI_CCI_CANCEL_COMPLETE) {
|
||||
ret = ucsi_acknowledge_command(ucsi);
|
||||
return ret ? ret : -EBUSY;
|
||||
}
|
||||
|
||||
return UCSI_CCI_LENGTH(cci);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user