Re: [PATCH] media: atomisp: Fix smatch warnings caused by atomisp custom assert() usage

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

 



On 27/07/2023 17:56, Hans de Goede wrote:
> The atomisp code base has a custom assert() macro, a couple of functions
> use this in a construction like the following:
> 
>    assert(pipe);
>    assert(pipe->stream);
>    if ((!pipe) || (!pipe->stream)) {
>            ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
>                                "allocate_mipi_frames(%p) exit: ...\n",
>                                pipe);
>            return -EINVAL;
>    }
> 
> The second assert is seen by smatch as dereferencing "pipe" in the above
> example (and dereferencing "dvs_6axis_config" / "me" in the 2 other cases).
> 
> Following by the dereferenced variable being checked (a second time)
> in the following if () statement.
> 
> This triggers the following smatch warnings:
> drivers/staging/media/atomisp/pci/sh_css_mipi.c:356 allocate_mipi_frames() warn: variable dereferenced before check 'pipe' (see line 355)
> drivers/staging/media/atomisp/pci/sh_css_mipi.c:562 send_mipi_frames() warn: variable dereferenced before check 'pipe' (see line 561)
> drivers/staging/media/atomisp/pci/sh_css_param_dvs.c:208 free_dvs_6axis_table() warn: variable dereferenced before check 'dvs_6axis_config' (see line 206)
> drivers/staging/media/atomisp/pci/sh_css_sp.c:1255 sh_css_sp_init_pipeline() warn: variable dereferenced before check 'me->stages' (see line 1224)

After testing this patch with smatch I am still left with this warning:

drivers/staging/media/atomisp/pci/sh_css_sp.c:1251 sh_css_sp_init_pipeline() warn: variable dereferenced before check 'me->stages' (see line 1220)

Regards,

	Hans

> 
> The custom assert() macro actually expands to a BUG() call and BUG()
> calls should not be used in the kernel.
> 
> Remove the assert() calls to fix the smatch warnings and in case of
> [allocate|send]_mipi_frames() also remove the if () return -EINVAL
> block since these functions are never called with a NULL pipe.
> 
> Reported-by: Hans Verkuil <hverkuil@xxxxxxxxx>
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
> ---
> Note:
> 1. No Closes: tag since Hans Verkuil reported this in an offlist email.
> 2. All the other assert() calls really should also be removed.
>    I've put this on my todo list.
> ---
>  drivers/staging/media/atomisp/pci/sh_css_mipi.c  | 16 ----------------
>  .../staging/media/atomisp/pci/sh_css_param_dvs.c |  3 ---
>  drivers/staging/media/atomisp/pci/sh_css_sp.c    |  4 ----
>  3 files changed, 23 deletions(-)
> 
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_mipi.c b/drivers/staging/media/atomisp/pci/sh_css_mipi.c
> index b20acaab0595..ced21dedf7ac 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_mipi.c
> +++ b/drivers/staging/media/atomisp/pci/sh_css_mipi.c
> @@ -351,15 +351,6 @@ allocate_mipi_frames(struct ia_css_pipe *pipe,
>  	ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
>  			    "allocate_mipi_frames(%p) enter:\n", pipe);
>  
> -	assert(pipe);
> -	assert(pipe->stream);
> -	if ((!pipe) || (!pipe->stream)) {
> -		ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
> -				    "allocate_mipi_frames(%p) exit: pipe or stream is null.\n",
> -				    pipe);
> -		return -EINVAL;
> -	}
> -
>  	if (IS_ISP2401 && pipe->stream->config.online) {
>  		ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE,
>  				    "allocate_mipi_frames(%p) exit: no buffers needed for 2401 pipe mode.\n",
> @@ -557,13 +548,6 @@ send_mipi_frames(struct ia_css_pipe *pipe)
>  
>  	IA_CSS_ENTER_PRIVATE("pipe=%p", pipe);
>  
> -	assert(pipe);
> -	assert(pipe->stream);
> -	if (!pipe || !pipe->stream) {
> -		IA_CSS_ERROR("pipe or stream is null");
> -		return -EINVAL;
> -	}
> -
>  	/* multi stream video needs mipi buffers */
>  	/* nothing to be done in other cases. */
>  	if (pipe->stream->config.mode != IA_CSS_INPUT_MODE_BUFFERED_SENSOR) {
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c b/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c
> index ff0082d02af3..5174bc210ae1 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c
> +++ b/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c
> @@ -202,9 +202,6 @@ generate_dvs_6axis_table_from_config(struct ia_css_dvs_6axis_config
>  void
>  free_dvs_6axis_table(struct ia_css_dvs_6axis_config  **dvs_6axis_config)
>  {
> -	assert(dvs_6axis_config);
> -	assert(*dvs_6axis_config);
> -
>  	if ((dvs_6axis_config) && (*dvs_6axis_config)) {
>  		IA_CSS_ENTER_PRIVATE("dvs_6axis_config %p", (*dvs_6axis_config));
>  		if ((*dvs_6axis_config)->xcoords_y) {
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_sp.c b/drivers/staging/media/atomisp/pci/sh_css_sp.c
> index 4ef1c9e61ea8..5ecc982ad725 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_sp.c
> +++ b/drivers/staging/media/atomisp/pci/sh_css_sp.c
> @@ -1215,10 +1215,6 @@ sh_css_sp_init_pipeline(struct ia_css_pipeline *me,
>  	unsigned int thread_id;
>  	u8 if_config_index, tmp_if_config_index;
>  
> -	assert(me);
> -
> -	assert(me->stages);
> -
>  	first_binary = me->stages->binary;
>  
>  	if (input_mode == IA_CSS_INPUT_MODE_SENSOR ||





[Index of Archives]     [Linux Driver Development]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux