From: Dan Carpenter <dan.carpenter@oracle.com>
To: Ben Skeggs <bskeggs@redhat.com>
Cc: David Airlie <airlied@linux.ie>,
nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [Nouveau] [PATCH] drm/nouveau/core/object: fix double free on error in nvkm_ioctl_new()
Date: Thu, 17 Jun 2021 14:32:43 +0300 [thread overview]
Message-ID: <20210617113243.GH1901@kadam> (raw)
In-Reply-To: <YMcyzyVyI4N6anBo@mwanda>
On Mon, Jun 14, 2021 at 01:43:27PM +0300, Dan Carpenter wrote:
> If nvkm_object_init() fails then we should not call nvkm_object_fini()
> because it results in calling object->func->fini(object, suspend) twice.
> Once inside the nvkm_object_init() function and once inside the
> nvkm_object_fini() function.
>
> Fixes: fbd58ebda9c8 ("drm/nouveau/object: merge with handle")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> This is something that I spotted while looking for reference counting
> bugs. I have tried running it, but it does not fix my crashes. My
> system is basically unusable. It's something to do with the new version
> of Firefox which triggers the refcount_t underflow, but switching to
> Epiphany doesn't solve the issue either.
>
> drivers/gpu/drm/nouveau/nvkm/core/ioctl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
> index d777df5a64e6..87c761fb475a 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
> @@ -134,8 +134,8 @@ nvkm_ioctl_new(struct nvkm_client *client,
> return 0;
> }
> ret = -EEXIST;
> + nvkm_object_fini(object, false);
> }
> - nvkm_object_fini(object, false);
Actually calling nvkm_object_fini() is probably fine. It just screws
around with the registers and it's probably fine if we do that twice.
Calling .dtor() when .ctor() fails is actually required because .ctor
doesn't clean up after itself.
So this patch is not required. The other patch is required.
https://lore.kernel.org/nouveau/YMinJwpIei9n1Pn1@mwanda/T/
In the end, I had to give up on fixing the hang and downgrade to
debian's long term support version of firefox.
regards,
dan carpenter
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Ben Skeggs <bskeggs@redhat.com>
Cc: David Airlie <airlied@linux.ie>,
nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/nouveau/core/object: fix double free on error in nvkm_ioctl_new()
Date: Thu, 17 Jun 2021 14:32:43 +0300 [thread overview]
Message-ID: <20210617113243.GH1901@kadam> (raw)
In-Reply-To: <YMcyzyVyI4N6anBo@mwanda>
On Mon, Jun 14, 2021 at 01:43:27PM +0300, Dan Carpenter wrote:
> If nvkm_object_init() fails then we should not call nvkm_object_fini()
> because it results in calling object->func->fini(object, suspend) twice.
> Once inside the nvkm_object_init() function and once inside the
> nvkm_object_fini() function.
>
> Fixes: fbd58ebda9c8 ("drm/nouveau/object: merge with handle")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> This is something that I spotted while looking for reference counting
> bugs. I have tried running it, but it does not fix my crashes. My
> system is basically unusable. It's something to do with the new version
> of Firefox which triggers the refcount_t underflow, but switching to
> Epiphany doesn't solve the issue either.
>
> drivers/gpu/drm/nouveau/nvkm/core/ioctl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
> index d777df5a64e6..87c761fb475a 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
> @@ -134,8 +134,8 @@ nvkm_ioctl_new(struct nvkm_client *client,
> return 0;
> }
> ret = -EEXIST;
> + nvkm_object_fini(object, false);
> }
> - nvkm_object_fini(object, false);
Actually calling nvkm_object_fini() is probably fine. It just screws
around with the registers and it's probably fine if we do that twice.
Calling .dtor() when .ctor() fails is actually required because .ctor
doesn't clean up after itself.
So this patch is not required. The other patch is required.
https://lore.kernel.org/nouveau/YMinJwpIei9n1Pn1@mwanda/T/
In the end, I had to give up on fixing the hang and downgrade to
debian's long term support version of firefox.
regards,
dan carpenter
next prev parent reply other threads:[~2021-06-17 12:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-14 10:43 [Nouveau] [PATCH] drm/nouveau/core/object: fix double free on error in nvkm_ioctl_new() Dan Carpenter
2021-06-14 10:43 ` Dan Carpenter
2021-06-14 11:05 ` [Nouveau] " Dan Carpenter
2021-06-14 11:05 ` Dan Carpenter
2021-06-17 11:32 ` Dan Carpenter [this message]
2021-06-17 11:32 ` Dan Carpenter
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=20210617113243.GH1901@kadam \
--to=dan.carpenter@oracle.com \
--cc=airlied@linux.ie \
--cc=bskeggs@redhat.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=nouveau@lists.freedesktop.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.