Message ID | 20240325-gcc-arm-warnings-v2-3-47523cf5c8ca@chromium.org |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | media: Fix gcc warnings | expand |
Hello Ricardo, On Mon, 25 Mar 2024 14:19:55 +0000 Ricardo Ribalda <ribalda@chromium.org> wrote: > Because the size passed to copy_from_user() cannot be known beforehand, > it needs to be checked during runtime with check_object_size. That makes > gcc believe that the content of sbuf can be used before init. > > Fix: > ./include/linux/thread_info.h:215:17: warning: ‘sbuf’ may be used uninitialized [-Wmaybe-uninitialized] > > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> > --- > drivers/media/dvb-core/dvbdev.c | 2 +- > drivers/staging/media/tegra-video/tegra20.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c > index 733d0bc4b4cc3..b43695bc51e75 100644 > --- a/drivers/media/dvb-core/dvbdev.c > +++ b/drivers/media/dvb-core/dvbdev.c > @@ -956,7 +956,7 @@ int dvb_usercopy(struct file *file, > int (*func)(struct file *file, > unsigned int cmd, void *arg)) > { > - char sbuf[128]; > + char sbuf[128] = {}; > void *mbuf = NULL; > void *parg = NULL; > int err = -EINVAL; > diff --git a/drivers/staging/media/tegra-video/tegra20.c b/drivers/staging/media/tegra-video/tegra20.c > index c39b52d0e4447..630e2ff987a37 100644 > --- a/drivers/staging/media/tegra-video/tegra20.c > +++ b/drivers/staging/media/tegra-video/tegra20.c > @@ -164,6 +164,7 @@ static void tegra20_vi_get_input_formats(struct tegra_vi_channel *chan, > unsigned int input_mbus_code = chan->fmtinfo->code; > > (*main_input_format) = VI_INPUT_INPUT_FORMAT_YUV422; > + (*yuv_input_format) = VI_INPUT_YUV_INPUT_FORMAT_UYVY; I agree with Thierry this seems to be the best fix, making this function similar to tegra20_vi_get_output_formats(). However in this v2 your change ended up in patch 3 while it should be in patch 1. I'm glad to add my Reviewed-by tag on a new version with this fixed. Luca
diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c index 733d0bc4b4cc3..b43695bc51e75 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -956,7 +956,7 @@ int dvb_usercopy(struct file *file, int (*func)(struct file *file, unsigned int cmd, void *arg)) { - char sbuf[128]; + char sbuf[128] = {}; void *mbuf = NULL; void *parg = NULL; int err = -EINVAL; diff --git a/drivers/staging/media/tegra-video/tegra20.c b/drivers/staging/media/tegra-video/tegra20.c index c39b52d0e4447..630e2ff987a37 100644 --- a/drivers/staging/media/tegra-video/tegra20.c +++ b/drivers/staging/media/tegra-video/tegra20.c @@ -164,6 +164,7 @@ static void tegra20_vi_get_input_formats(struct tegra_vi_channel *chan, unsigned int input_mbus_code = chan->fmtinfo->code; (*main_input_format) = VI_INPUT_INPUT_FORMAT_YUV422; + (*yuv_input_format) = VI_INPUT_YUV_INPUT_FORMAT_UYVY; switch (input_mbus_code) { case MEDIA_BUS_FMT_UYVY8_2X8: @@ -176,7 +177,6 @@ static void tegra20_vi_get_input_formats(struct tegra_vi_channel *chan, (*yuv_input_format) = VI_INPUT_YUV_INPUT_FORMAT_YUYV; break; case MEDIA_BUS_FMT_YVYU8_2X8: - default: (*yuv_input_format) = VI_INPUT_YUV_INPUT_FORMAT_YVYU; break; }
Because the size passed to copy_from_user() cannot be known beforehand, it needs to be checked during runtime with check_object_size. That makes gcc believe that the content of sbuf can be used before init. Fix: ./include/linux/thread_info.h:215:17: warning: ‘sbuf’ may be used uninitialized [-Wmaybe-uninitialized] Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> --- drivers/media/dvb-core/dvbdev.c | 2 +- drivers/staging/media/tegra-video/tegra20.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)