From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
stable <stable@kernel.org>
Subject: Re: [PATCH] usb: typec: ucsi: ccg: reject firmware images without a ':' record header
Date: Mon, 18 May 2026 13:38:36 +0300 [thread overview]
Message-ID: <agrsLHAGds_cXDrR@kuha> (raw)
In-Reply-To: <2026051405-posture-shrill-7884@gregkh>
On Thu, May 14, 2026 at 07:10:06PM +0200, Greg Kroah-Hartman wrote:
> do_flash() locates the first .cyacd record with
>
> p = strnchr(fw->data, fw->size, ':');
> while (p < eof) {
> s = strnchr(p + 1, eof - p - 1, ':');
> ...
> }
>
> If the firmware image contains no ':' byte, strnchr() returns NULL.
> NULL compares less than the valid kernel pointer eof, so the loop body
> runs and strnchr() is called with p + 1 == (void *)1 and a length of
> roughly (unsigned long)eof, causing a wonderful crash.
>
> The not_signed_fw fallthrough earlier in do_flash() and the chip-state
> branches in ccg_fw_update_needed() allow an unsigned blob to reach this
> loop, so a root user who can place a crafted file under /lib/firmware
> and write the do_flash sysfs attribute can trigger the oops.
>
> Bail out with -EINVAL when the initial strnchr() returns NULL.
>
> Assisted-by: gkh_clanker_t1000
> Cc: stable <stable@kernel.org>
> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> drivers/usb/typec/ucsi/ucsi_ccg.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi_ccg.c b/drivers/usb/typec/ucsi/ucsi_ccg.c
> index 199799b319c2..4463c1ae96bd 100644
> --- a/drivers/usb/typec/ucsi/ucsi_ccg.c
> +++ b/drivers/usb/typec/ucsi/ucsi_ccg.c
> @@ -1243,6 +1243,11 @@ static int do_flash(struct ucsi_ccg *uc, enum enum_flash_mode mode)
> *****************************************************************/
>
> p = strnchr(fw->data, fw->size, ':');
> + if (!p) {
> + dev_err(dev, "Bad FW format: no ':' record header found\n");
> + err = -EINVAL;
> + goto release_mem;
> + }
> while (p < eof) {
> s = strnchr(p + 1, eof - p - 1, ':');
>
> --
> 2.54.0
--
heikki
prev parent reply other threads:[~2026-05-18 10:38 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-14 17:10 [PATCH] usb: typec: ucsi: ccg: reject firmware images without a ':' record header Greg Kroah-Hartman
2026-05-18 10:38 ` Heikki Krogerus [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=agrsLHAGds_cXDrR@kuha \
--to=heikki.krogerus@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=stable@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.