linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: laurent.pinchart@ideasonboard.com, hverkuil@xs4all.nl
Subject: [PATCH 00/26] Media device lifetime management
Date: Wed,  1 Feb 2023 23:45:09 +0200	[thread overview]
Message-ID: <20230201214535.347075-1-sakari.ailus@linux.intel.com> (raw)

Hi folks,

This is a refresh of my 2016 RFC patchset to start addressing object
lifetime issues in Media controller. It further allows continuing work to
address lifetime management of media entities.

The underlying problem is described in detail in v4 of the previous RFC:
<URL:https://lore.kernel.org/linux-media/20161108135438.GO3217@valkosipuli.retiisi.org.uk/>.
In brief, there is currently no connection between releasing media device
(and related) memory and IOCTL calls, meaning that there is a time window
during which released kernel memory can be accessed, and that access can be
triggered from the user space. The only reason why this is not a grave
security issue is that it is not triggerable by the user alone but requires
unbinding a device. That is still not an excuse for not fixing it.

This set differs from the earlier RFC to address the issue in the
following respects:

- Make changes for ipu3-cio2 driver, too.

- Continue to provide best effort attempt to keep the window between device
  removal and user space being able to access released memory as small as
  possible. This means the problem won't become worse for drivers for which
  Media device lifetime management has not been implemented.

The latter is achieved by adding a new object, Media devnode compat
reference, which is allocated, refcounted and eventually released by the
Media controller framework itself, and where the information on registration
and open filehandles is maintained. This is only done if the driver does not
manage the lifetime of the media device itself, i.e. its release operation
is NULL.

Due to this, Media device file handles will also be introduced by this
patchset. I thought the first user of this would be Media device events but
it seems we already need them here.

Both ipu3-cio2 and omap3isp drivers are relieved of devm_request_irq() use,
as device_release() releases the resources before calling the driver's
remove function. While further work will be required also on these drivers
to safely stop he hardware at unbind time, I don't see a reason not to merge
these patches now.

Some patches are temporarily reverted in order to make reworks easier, then
applied later on.

I've tested this on ipu3-cio2 with and without the refcounting patch (media:
ipu3-cio2: Release the cio2 device context by media device callback),
including failures in a few parts of the driver initialisation process in
the MC framework.

Questions and comments are welcome.


Daniel Axtens (1):
  media: uvcvideo: Refactor teardown of uvc on USB disconnect

Laurent Pinchart (1):
  media: Add per-file-handle data support

Logan Gunthorpe (1):
  media: utilize new cdev_device_add helper function

Sakari Ailus (23):
  Revert "[media] media: fix media devnode ioctl/syscall and unregister
    race"
  Revert "media: utilize new cdev_device_add helper function"
  Revert "[media] media: fix use-after-free in cdev_put() when app exits
    after driver unbind"
  Revert "media: uvcvideo: Refactor teardown of uvc on USB disconnect"
  Revert "[media] media-device: dynamically allocate struct
    media_devnode"
  media device: Drop nop release callback
  media: Do not call cdev_device_del() if cdev_device_add() fails
  media-device: Delete character device early
  media: Split initialising and adding media devnode
  media: Shuffle functions around
  media device: Initialise media devnode in media_device_init()
  media device: Refcount the media device
  v4l: Acquire a reference to the media device for every video device
  media-device: Postpone graph object removal until free
  omap3isp: Release the isp device struct by media device callback
  omap3isp: Don't use devm_request_irq()
  media: Add nop implementations of media_device_{init,cleanup}
  media: ipu3-cio2: Call v4l2_device_unregister() earlier
  media: ipu3-cio2: Don't use devm_request_irq()
  media: ipu3-cio2: Release the cio2 device context by media device
    callback
  media: Maintain a list of open file handles in a media device
  media: Implement best effort media device removal safety sans
    refcounting
  media: Document how Media device resources are released

 Documentation/driver-api/media/mc-core.rst    |  12 +-
 drivers/media/cec/core/cec-core.c             |   2 +-
 drivers/media/mc/mc-device.c                  | 279 +++++++++++-------
 drivers/media/mc/mc-devnode.c                 |  94 +++---
 drivers/media/pci/intel/ipu3/ipu3-cio2-main.c |  75 +++--
 drivers/media/platform/ti/omap3isp/isp.c      |  33 ++-
 drivers/media/usb/au0828/au0828-core.c        |   4 +-
 drivers/media/usb/uvc/uvc_driver.c            |   2 +-
 drivers/media/v4l2-core/v4l2-dev.c            |  13 +-
 drivers/staging/media/sunxi/cedrus/cedrus.c   |   2 +-
 include/media/media-device.h                  |  56 +++-
 include/media/media-devnode.h                 |  99 ++++---
 include/media/media-fh.h                      |  32 ++
 13 files changed, 476 insertions(+), 227 deletions(-)
 create mode 100644 include/media/media-fh.h

-- 
2.30.2


             reply	other threads:[~2023-02-01 21:45 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-01 21:45 Sakari Ailus [this message]
2023-02-01 21:45 ` [PATCH 01/26] Revert "[media] media: fix media devnode ioctl/syscall and unregister race" Sakari Ailus
2023-02-01 21:45 ` [PATCH 02/26] Revert "media: utilize new cdev_device_add helper function" Sakari Ailus
2023-02-01 21:45 ` [PATCH 03/26] Revert "[media] media: fix use-after-free in cdev_put() when app exits after driver unbind" Sakari Ailus
2023-02-01 21:45 ` [PATCH 04/26] media: utilize new cdev_device_add helper function Sakari Ailus
2023-02-01 21:45 ` [PATCH 05/26] Revert "media: uvcvideo: Refactor teardown of uvc on USB disconnect" Sakari Ailus
2023-02-01 21:45 ` [PATCH 06/26] Revert "[media] media-device: dynamically allocate struct media_devnode" Sakari Ailus
2023-02-01 21:45 ` [PATCH 07/26] media: uvcvideo: Refactor teardown of uvc on USB disconnect Sakari Ailus
2023-02-01 21:45 ` [PATCH 08/26] media device: Drop nop release callback Sakari Ailus
2023-02-01 21:45 ` [PATCH 09/26] media: Do not call cdev_device_del() if cdev_device_add() fails Sakari Ailus
2023-02-01 21:45 ` [PATCH 10/26] media-device: Delete character device early Sakari Ailus
2023-02-01 21:45 ` [PATCH 11/26] media: Split initialising and adding media devnode Sakari Ailus
2023-02-01 21:45 ` [PATCH 12/26] media: Shuffle functions around Sakari Ailus
2023-02-01 21:45 ` [PATCH 13/26] media device: Initialise media devnode in media_device_init() Sakari Ailus
2023-02-01 21:45 ` [PATCH 14/26] media device: Refcount the media device Sakari Ailus
2023-02-01 21:45 ` [PATCH 15/26] v4l: Acquire a reference to the media device for every video device Sakari Ailus
2023-02-01 21:45 ` [PATCH 16/26] media-device: Postpone graph object removal until free Sakari Ailus
2023-02-01 21:45 ` [PATCH 17/26] omap3isp: Release the isp device struct by media device callback Sakari Ailus
2023-02-01 21:45 ` [PATCH 18/26] omap3isp: Don't use devm_request_irq() Sakari Ailus
2023-02-01 21:45 ` [PATCH 19/26] media: Add nop implementations of media_device_{init,cleanup} Sakari Ailus
2023-02-01 21:45 ` [PATCH 20/26] media: ipu3-cio2: Call v4l2_device_unregister() earlier Sakari Ailus
2023-02-01 21:45 ` [PATCH 21/26] media: ipu3-cio2: Don't use devm_request_irq() Sakari Ailus
2023-03-03  8:21   ` Hans Verkuil
2023-03-03 10:58     ` Sakari Ailus
2023-04-12 16:45       ` Sakari Ailus
2023-02-01 21:45 ` [PATCH 22/26] media: ipu3-cio2: Release the cio2 device context by media device callback Sakari Ailus
2023-02-01 21:45 ` [PATCH 23/26] media: Add per-file-handle data support Sakari Ailus
2023-02-01 21:45 ` [PATCH 24/26] media: Maintain a list of open file handles in a media device Sakari Ailus
2023-02-01 21:45 ` [PATCH 25/26] media: Implement best effort media device removal safety sans refcounting Sakari Ailus
2023-03-03  8:39   ` Hans Verkuil
2023-03-03  8:54     ` Hans Verkuil
2023-03-03 11:08       ` Sakari Ailus
2023-03-13 13:46         ` Hans Verkuil
2023-03-13 14:02           ` Sakari Ailus
2023-03-13 14:39             ` Hans Verkuil
2023-03-13 16:53               ` Sakari Ailus
2023-03-14  8:30                 ` Hans Verkuil
2023-03-14  8:43                   ` Sakari Ailus
2023-03-14  8:58                     ` Hans Verkuil
2023-03-14 10:59                       ` Sakari Ailus
2023-03-31 10:53                         ` Hans Verkuil
2023-03-31 11:54                           ` Sakari Ailus
2023-03-03 11:06     ` Sakari Ailus
2023-02-01 21:45 ` [PATCH 26/26] media: Document how Media device resources are released Sakari Ailus
2023-03-03  9:07 ` [PATCH 00/26] Media device lifetime management Hans Verkuil
2023-03-03 11:23   ` Sakari Ailus
2023-03-03 11:27     ` Hans Verkuil
2023-03-03 16:54     ` Sakari Ailus

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=20230201214535.347075-1-sakari.ailus@linux.intel.com \
    --to=sakari.ailus@linux.intel.com \
    --cc=hverkuil@xs4all.nl \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).