• L
    media: Zero-initialize all structures passed to subdev pad operations · ecefa105
    Laurent Pinchart 提交于
    Several drivers call subdev pad operations, passing structures that are
    not fully zeroed. While the drivers initialize the fields they care
    about explicitly, this results in reserved fields having uninitialized
    values. Future kernel API changes that make use of those fields thus
    risk breaking proper driver operation in ways that could be hard to
    detect.
    
    To avoid this, make the code more robust by zero-initializing all the
    structures passed to subdev pad operation. Maintain a consistent coding
    style by preferring designated initializers (which zero-initialize all
    the fields that are not specified) over memset() where possible, and
    make variable declarations local to inner scopes where applicable. One
    notable exception to this rule is in the ipu3 driver, where a memset()
    is needed as the structure is not a local variable but a function
    parameter provided by the caller.
    
    Not all fields of those structures can be initialized when declaring the
    variables, as the values for those fields are computed later in the
    code. Initialize the 'which' field in all cases, and other fields when
    the variable declaration is so close to the v4l2_subdev_call() call that
    it keeps all the context easily visible when reading the code, to avoid
    hindering readability.
    Signed-off-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org> # For vimc
    Reviewed-by: Lad Prabhakar <prabhakar.csengg@gmail.com> # For am437x
    Acked-by: NSakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: NTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Reviewed-by: NKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
    Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> # For drivers/staging/media/imx/
    Signed-off-by: NHans Verkuil <hverkuil-cisco@xs4all.nl>
    ecefa105
vimc-common.c 9.1 KB