• Laurent Pinchart's avatar
    media: i2c: max9286: Allocate v4l2_async_subdev dynamically · 86d37bf3
    Laurent Pinchart authored
    v4l2_async_notifier_add_subdev() requires the asd to be allocated
    dynamically, but the max9286 driver embeds it in the max9286_source
    structure. This causes memory corruption when the notifier is destroyed
    at remove time with v4l2_async_notifier_cleanup().
    
    Fix this issue by registering the asd with
    v4l2_async_notifier_add_fwnode_subdev(), which allocates it dynamically
    internally. A new max9286_asd structure is introduced, to store a
    pointer to the corresonding max9286_source that needs to be accessed
    from bound and unbind callbacks. There's no need to take an extra
    explicit reference to the fwnode anymore as
    v4l2_async_notifier_add_fwnode_subdev() does so internally.
    
    While at it, use %u instead of %d to print the unsigned index in the
    error message from the v4l2_async_notifier_add_fwnode_subdev() error
    path.
    
    Fixes: 66d8c9d2 ("media: i2c: Add MAX9286 driver")
    Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    86d37bf3
max9286.c 33.1 KB