Re: [PATCH 00/26] Media device lifetime management

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sakari,

On 01/02/2023 22:45, Sakari Ailus wrote:
> 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@xxxxxxxxxxxxxxxxxxxxxxxxxx/>.
> 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.

Most of this series looks good.

You can add my:

Acked-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>

for patches 1-17, 19, 20 and 22.

As I mentioned in my review of patch 21, I don't think 18 and 21 belong to
this series.

I am also not keen on patch 25 (and thus 23 and 24 that it needs). Perhaps
take that out for now for more discussion later?

I would like to see some more drivers to be converted: specifically uvc
and the test drivers (vidtv, vim2m, vimc, visl, vivid). uvc because it is
widely used, the test drivers because they function as reference code.

Finally, I don't think this series addresses another life-cycle problem:
unbinding subdevices when they are still being used, either by userspace
or a bridge driver.

I have patches for that here:

https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=subdev-kref

I think these are pretty much independent from this patch series, but
I'll wait with posting them until this is merged.

Background: we have an fpga that implements subdevices and also
(depending on the configuration) complete v4l2 platform drivers.

When the fpga is unloaded when going to standby, subdevices and/or
platform drivers just disappear, and without correct life-time management
you get crashes. Basically exactly the same problem as you have with the
media device.

Regards,

	Hans

> 
> 
> 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
> 




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux