lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAAObsKBEV0q78CFmy1ezwKLQEY0hLDn4ct0UxedGKVZM7tCKeg@mail.gmail.com>
Date: Fri, 1 Mar 2024 10:27:47 +0100
From: Tomeu Vizoso <tomeu@...euvizoso.net>
To: Christian Gmeiner <christian.gmeiner@...il.com>
Cc: Lucas Stach <l.stach@...gutronix.de>, Russell King <linux+etnaviv@...linux.org.uk>, 
	David Airlie <airlied@...il.com>, Daniel Vetter <daniel@...ll.ch>, 
	Christian Gmeiner <cgmeiner@...lia.com>, stable@...r.kernel.org, etnaviv@...ts.freedesktop.org, 
	dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] etnaviv: Restore some id values

On Thu, Feb 29, 2024 at 8:55 PM Christian Gmeiner
<christian.gmeiner@...il.com> wrote:
>
> From: Christian Gmeiner <cgmeiner@...lia.com>
>
> The hwdb selection logic as a feature that allows it to mark some fields
> as 'don't care'. If we match with such a field we memcpy(..)
> the current etnaviv_chip_identity into ident.
>
> This step can overwrite some id values read from the GPU with the
> 'don't care' value.
>
> Fix this issue by restoring the affected values after the memcpy(..).
>
> As this is crucial for user space to know when this feature works as
> expected increment the minor version too.
>
> Fixes: 4078a1186dd3 ("drm/etnaviv: update hwdb selection logic")
> Cc: stable@...r.kernel.org

Oops.

Reviewed-by: Tomeu Vizoso <tomeu@...euvizoso.net>

Cheers,

Tomeu

> Signed-off-by: Christian Gmeiner <cgmeiner@...lia.com>
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_drv.c  |  2 +-
>  drivers/gpu/drm/etnaviv/etnaviv_hwdb.c | 14 ++++++++++++++
>  2 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index 6228ce603248..9a2965741dab 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -494,7 +494,7 @@ static const struct drm_driver etnaviv_drm_driver = {
>         .desc               = "etnaviv DRM",
>         .date               = "20151214",
>         .major              = 1,
> -       .minor              = 3,
> +       .minor              = 4,
>  };
>
>  /*
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c b/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> index 67201242438b..1e38d66702f1 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> @@ -265,6 +265,9 @@ static const struct etnaviv_chip_identity etnaviv_chip_identities[] = {
>  bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
>  {
>         struct etnaviv_chip_identity *ident = &gpu->identity;
> +       const u32 product_id = ident->product_id;
> +       const u32 customer_id = ident->customer_id;
> +       const u32 eco_id = ident->eco_id;
>         int i;
>
>         for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) {
> @@ -278,6 +281,17 @@ bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
>                          etnaviv_chip_identities[i].eco_id == ~0U)) {
>                         memcpy(ident, &etnaviv_chip_identities[i],
>                                sizeof(*ident));
> +
> +                       /* Restore some id values if ~0U aka 'don't care' is used. */
> +                       if (etnaviv_chip_identities[i].product_id == ~0U)
> +                               ident->product_id = product_id;
> +
> +                       if (etnaviv_chip_identities[i].customer_id == ~0U)
> +                               ident->customer_id = customer_id;
> +
> +                       if (etnaviv_chip_identities[i].eco_id == ~0U)
> +                               ident->eco_id = eco_id;
> +
>                         return true;
>                 }
>         }
> --
> 2.44.0
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ