Re: [PATCH v2] usb: typec: tcpm: Correct the PDO counting in pd_set

From: Kyle Tso
Date: Thu Apr 04 2024 - 09:39:58 EST


On Thu, Apr 4, 2024 at 9:22 PM Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On Tue, Mar 26, 2024 at 11:19:09PM +0800, Kyle Tso wrote:
> > Off-by-one errors happen because nr_snk_pdo and nr_src_pdo are
> > incorrectly added one. The index of the loop is equal to the number of
> > PDOs to be updated when leaving the loop and it doesn't need to be added
> > one.
> >
> > When doing the power negotiation, TCPM relies on the "nr_snk_pdo" as
> > the size of the local sink PDO array to match the Source capabilities
> > of the partner port. If the off-by-one overflow occurs, a wrong RDO
> > might be sent and unexpected power transfer might happen such as over
> > voltage or over current (than expected).
> >
> > "nr_src_pdo" is used to set the Rp level when the port is in Source
> > role. It is also the array size of the local Source capabilities when
> > filling up the buffer which will be sent as the Source PDOs (such as
> > in Power Negotiation). If the off-by-one overflow occurs, a wrong Rp
> > level might be set and wrong Source PDOs will be sent to the partner
> > port. This could potentially cause over current or port resets.
> >
> > Fixes: cd099cde4ed2 ("usb: typec: tcpm: Support multiple capabilities")
> > Cc: stable@xxxxxxxxxxxxxxx
> > Signed-off-by: Kyle Tso <kyletso@xxxxxxxxxx>
> > ---
> > v1 -> v2:
> > - update the commit message (adding the problems this patch solves)
> >
> > drivers/usb/typec/tcpm/tcpm.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
>
> This fails to apply to my usb-linus branch :(
>
> Can you rebase and resend?
>
> thanks,
>
> greg k-h

Just sent v3