On Fri, Sep 04, 2026 at 11:44:01PM +0000, Jameson Thies wrote: > The UCSI displayport driver indexes the connector's port altmode array > with the GET_CURRENT_CAM response after checking it is not 0xff. The > port altmode array is UCSI_MAX_ALTMODES elements long. If the PPM > returns an invalid GET_CURRENT_CAM response above UCSI_MAX_ALTMODES and > not equal to 0xff, the kernel may crash with an array index OOB error. > > Update the UCSI displayport driver to verify the current cam is less > than UCSI_MAX_ALTMODES before accessing the port altmode array. > > Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode") > Cc: stable@vger.kernel.org > Signed-off-by: Jameson Thies Reviewed-by: Benson Leung > --- > Changes in v2: > - removed 0xff alt mode assignement when GET_CURRENT_CAM returns an error. > - return -EINVAL when alt mode index above UCSI_MAX_ALTMODES is returned. > > drivers/usb/typec/ucsi/displayport.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/typec/ucsi/displayport.c b/drivers/usb/typec/ucsi/displayport.c > index 7067f2561b84..572da7bbd29c 100644 > --- a/drivers/usb/typec/ucsi/displayport.c > +++ b/drivers/usb/typec/ucsi/displayport.c > @@ -71,11 +71,14 @@ static int ucsi_displayport_enter(struct typec_altmode *alt, u32 *vdo) > if (ret < 0) { > if (ucsi->version > 0x0100) > goto err_unlock; > - cur = 0xff; > } > > if (cur != 0xff) { > - ret = dp->con->port_altmode[cur] == alt ? 0 : -EBUSY; > + if (cur < UCSI_MAX_ALTMODES) > + ret = dp->con->port_altmode[cur] == alt ? 0 : -EBUSY; > + else > + ret = -EINVAL; > + > goto err_unlock; > } > > > base-commit: cee9395acd8043be0644b25c34bfa86623f2b935 > -- > 2.55.0.979.g7e5102b832-goog >