From: Sultan Alsawaf <sultan@kerneltoast.com>
To: "Du, Bin" <bin.du@amd.com>
Cc: mchehab@kernel.org, hverkuil@xs4all.nl,
laurent.pinchart+renesas@ideasonboard.com,
bryan.odonoghue@linaro.org, sakari.ailus@linux.intel.com,
prabhakar.mahadev-lad.rj@bp.renesas.com,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
pratap.nirujogi@amd.com, benjamin.chan@amd.com, king.li@amd.com,
gjorgji.rosikopulos@amd.com, Phil.Jawich@amd.com,
Dominic.Antony@amd.com
Subject: Re: [PATCH v2 6/8] media: platform: amd: isp4 video node and buffers handling added
Date: Sat, 26 Jul 2025 14:41:41 -0700 [thread overview]
Message-ID: <aIVLlZvTQFoBL70r@sultan-box> (raw)
In-Reply-To: <ff2f17c6-c5e4-4b7b-b897-8abb4cb79c35@amd.com>
On Fri, Jul 25, 2025 at 05:22:41PM +0800, Du, Bin wrote:
> > > +static struct dma_buf *isp4vid_vb2_get_dmabuf(struct vb2_buffer *vb,
> > > + void *buf_priv,
> > > + unsigned long flags)
> > > +{
> > > + struct isp4vid_vb2_buf *buf = buf_priv;
> > > + struct dma_buf *dbuf;
> > > +
> > > + if (buf->dbuf) {
> > > + dev_dbg(buf->dev,
> > > + "dbuf already created, reuse implicit dbuf\n");
> > > + dbuf = buf->dbuf;
> >
> > The dmabuf is reused here without taking a reference to it. When the get_dmabuf
> > memop is called by vb2_core_expbuf(), it assumes that a reference to the dmabuf
> > is acquired. So you need to add `get_dma_buf(dbuf)` here.
> After test, we found we can't add get_dma_buf(dbuf) here because it will
> make cheese APP fail to open camera with following error:
> amdgpu: [drm] *ERROR* failed to alloc gart kernel buffer (-28)
I see, it's because buf->is_expbuf is set to true even for the implicit dbuf, so
the initial reference on the implicit dbuf is never put, causing a leak.
Also, the refcount increment in isp4vid_vb2_get_dmabuf() is done every time even
when reusing the existing dbuf, but releasing the dbuf will only do a single
refcount decrement. This also causes a leak.
And, isp4vid_get_dmabuf() may fail but isp4vid_vb2_get_dmabuf() doesn't check
the return value, so there may be another leak when isp4vid_get_dmabuf() fails
because of the refcount increment. The refcount increment and setting of
buf->is_expbuf to true should only be done on success.
I have fixed all of these isp4vid_vb2_get_dmabuf() issues in the following diff,
please try it:
--- a/drivers/media/platform/amd/isp4/isp4_video.c
+++ b/drivers/media/platform/amd/isp4/isp4_video.c
@@ -476,18 +476,22 @@ static struct dma_buf *isp4vid_vb2_get_dmabuf(struct vb2_buffer *vb,
unsigned long flags)
{
struct isp4vid_vb2_buf *buf = buf_priv;
- struct dma_buf *dbuf;
+ struct dma_buf *dbuf = buf->dbuf;
- if (buf->dbuf) {
+ if (dbuf) {
dev_dbg(buf->dev,
- "dbuf already created, reuse implicit dbuf\n");
- dbuf = buf->dbuf;
+ "dbuf already created, reuse %s dbuf\n",
+ buf->is_expbuf ? "exported" : "implicit");
+ get_dma_buf(dbuf);
} else {
dbuf = isp4vid_get_dmabuf(vb, buf_priv, flags);
+ if (!dbuf)
+ return NULL;
+
dev_dbg(buf->dev, "created new dbuf\n");
+ buf->is_expbuf = true;
+ refcount_inc(&buf->refcount);
}
- buf->is_expbuf = true;
- refcount_inc(&buf->refcount);
dev_dbg(buf->dev, "buf exported, refcount %d\n",
buf->refcount.refs.counter);
--
> > > + dev_warn(buf->dev, "ignore buffer free, refcount %u > 0",
> > > + refcount_read(&buf->refcount));
> >
> > This refcount_read() is a possible use-after-free because `buf` is accessed
> > after isp4vid_vb2_put() puts its reference to `buf`. So something else could put
> > the last reference to `buf` and free it after this refcount dec but before the
> > refcount_read(). Maybe just remove this dev_warn() entirely?
> >
> The warning is important to debug mem related issue, plan to keep it but
> without accessing buf or buf->refcount here. Do you think it acceptible?
Yes, that sounds good. So something like this:
`dev_warn(buf->dev, "ignore buffer free, refcount > 0");`
Sultan
next prev parent reply other threads:[~2025-07-26 21:41 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-18 9:19 [PATCH v2 0/8] Add AMD ISP4 driver Bin Du
2025-06-18 9:19 ` [PATCH v2 1/8] media: platform: amd: Introduce amd isp4 capture driver Bin Du
2025-06-18 15:58 ` Mario Limonciello
2025-06-19 7:46 ` Du, Bin
2025-06-19 13:00 ` Mario Limonciello
2025-06-20 3:08 ` Du, Bin
2025-07-28 5:54 ` Sakari Ailus
2025-07-28 9:00 ` Du, Bin
2025-06-18 9:19 ` [PATCH v2 2/8] media: platform: amd: low level support for isp4 firmware Bin Du
2025-06-18 16:00 ` Mario Limonciello
2025-06-19 7:53 ` Du, Bin
2025-07-28 5:57 ` Sakari Ailus
2025-07-28 9:24 ` Du, Bin
2025-06-18 9:19 ` [PATCH v2 3/8] media: platform: amd: Add helpers to configure isp4 mipi phy Bin Du
2025-07-28 6:33 ` Sakari Ailus
2025-08-05 9:53 ` Du, Bin
2025-08-05 10:53 ` Laurent Pinchart
2025-08-06 9:56 ` Du, Bin
2025-08-05 10:39 ` Laurent Pinchart
2025-08-06 9:45 ` Du, Bin
2025-07-28 7:28 ` Sakari Ailus
2025-07-31 9:31 ` Du, Bin
2025-06-18 9:19 ` [PATCH v2 4/8] media: platform: amd: Add isp4 fw and hw interface Bin Du
2025-06-18 16:17 ` Mario Limonciello
2025-06-19 9:58 ` Du, Bin
2025-06-19 15:11 ` Mario Limonciello
2025-06-20 3:32 ` Du, Bin
2025-07-28 7:23 ` Sakari Ailus
2025-07-29 9:12 ` Du, Bin
2025-08-11 11:46 ` Sakari Ailus
2025-08-11 12:31 ` Laurent Pinchart
2025-08-12 3:36 ` Du, Bin
2025-08-12 7:34 ` Laurent Pinchart
2025-08-12 8:08 ` Du, Bin
2025-08-12 8:20 ` Sakari Ailus
2025-08-12 10:04 ` Du, Bin
2025-08-12 2:44 ` Du, Bin
2025-06-18 9:19 ` [PATCH v2 5/8] media: platform: amd: isp4 subdev and firmware loading handling added Bin Du
2025-06-18 16:35 ` Mario Limonciello
2025-06-20 9:31 ` Du, Bin
2025-07-06 20:55 ` Mario Limonciello
2025-07-07 6:22 ` Du, Bin
2025-07-25 1:35 ` Sultan Alsawaf
2025-07-25 9:03 ` Du, Bin
2025-06-18 9:19 ` [PATCH v2 6/8] media: platform: amd: isp4 video node and buffers " Bin Du
2025-07-23 17:55 ` Sultan Alsawaf
2025-07-24 5:14 ` Sultan Alsawaf
2025-07-25 9:05 ` Du, Bin
2025-07-25 9:22 ` Du, Bin
2025-07-26 21:41 ` Sultan Alsawaf [this message]
2025-07-26 21:50 ` Sultan Alsawaf
2025-07-29 6:12 ` Du, Bin
2025-07-29 6:08 ` Du, Bin
2025-07-28 7:04 ` Sultan Alsawaf
2025-07-29 7:43 ` Du, Bin
2025-07-31 0:34 ` Sultan Alsawaf
2025-07-31 9:45 ` Du, Bin
2025-08-11 6:02 ` Sultan Alsawaf
2025-08-11 9:05 ` Du, Bin
2025-08-12 5:51 ` Sultan Alsawaf
2025-08-12 6:33 ` Du, Bin
2025-08-13 9:42 ` Du, Bin
2025-08-14 6:37 ` Sultan Alsawaf
2025-06-18 9:19 ` [PATCH v2 7/8] media: platform: amd: isp4 debug fs logging and more descriptive errors Bin Du
2025-06-18 9:19 ` [PATCH v2 8/8] Documentation: add documentation of AMD isp 4 driver Bin Du
2025-08-05 11:37 ` Laurent Pinchart
2025-08-12 1:36 ` Du, Bin
2025-08-12 13:42 ` Laurent Pinchart
2025-08-22 2:28 ` Du, Bin
2025-08-20 12:42 ` Sakari Ailus
2025-08-22 2:20 ` Du, Bin
2025-09-22 6:24 ` Sakari Ailus
2025-09-22 9:19 ` Du, Bin
2025-07-23 18:12 ` [PATCH v2 0/8] Add AMD ISP4 driver Sultan Alsawaf
2025-07-25 10:22 ` Du, Bin
2025-07-26 22:31 ` Sultan Alsawaf
2025-07-29 3:32 ` Du, Bin
2025-07-29 7:42 ` Sultan Alsawaf
2025-07-29 7:45 ` Sultan Alsawaf
2025-07-29 10:13 ` Du, Bin
2025-07-30 5:38 ` Sultan Alsawaf
2025-07-30 9:53 ` Du, Bin
2025-07-31 0:30 ` Sultan Alsawaf
2025-07-31 10:04 ` Du, Bin
2025-08-04 3:32 ` Du, Bin
2025-08-04 4:25 ` Sultan Alsawaf
2025-08-08 9:11 ` Du, Bin
2025-08-11 5:49 ` Sultan Alsawaf
2025-08-11 8:35 ` Du, Bin
2025-08-11 21:48 ` Sultan Alsawaf
2025-08-11 22:17 ` Sultan Alsawaf
2025-08-12 2:02 ` Du, Bin
2025-08-14 6:53 ` Sultan Alsawaf
2025-08-22 2:23 ` Du, Bin
2025-08-22 3:56 ` Sultan Alsawaf
2025-08-27 10:30 ` Du, Bin
2025-08-28 5:50 ` Sultan Alsawaf
2025-09-02 2:08 ` Du, Bin
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=aIVLlZvTQFoBL70r@sultan-box \
--to=sultan@kerneltoast.com \
--cc=Dominic.Antony@amd.com \
--cc=Phil.Jawich@amd.com \
--cc=benjamin.chan@amd.com \
--cc=bin.du@amd.com \
--cc=bryan.odonoghue@linaro.org \
--cc=gjorgji.rosikopulos@amd.com \
--cc=hverkuil@xs4all.nl \
--cc=king.li@amd.com \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=pratap.nirujogi@amd.com \
--cc=sakari.ailus@linux.intel.com \
/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.