Message ID | 20230727155606.41903-1-hdegoede@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: atomisp: Fix smatch warnings caused by atomisp custom assert() usage | expand |
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@xs4all.nl> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > --- > 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 ||
Hi, On 7/28/23 09:23, Hans Verkuil wrote: > 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) Ok. I'll drop the sh_css_sp.c change from this patch and send a v2 of this one + a new patch to address the 'me->stages' issues. 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@xs4all.nl> >> Signed-off-by: Hans de Goede <hdegoede@redhat.com> >> --- >> 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 || >
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 ||
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) 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@xs4all.nl> Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- 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(-)