drm/imx: fix out of bounds array access warning
Subsystems (3)
PATCH 1/1 drm/imx: fix out of bounds array access warning
From: Arnd Bergmann <[email protected]>
When CONFIG_OF is disabled, building with 'make W=1' produces warnings about out of bounds array access:
drivers/gpu/drm/imx/imx-ldb.c: In function 'imx_ldb_set_clock.constprop':drivers/gpu/drm/imx/imx-ldb.c:186:8: error: array subscript -22 is below array bounds of 'struct clk *[4]' [-Werror=array-bounds]
Add an error check before the index is used, which helps with the warning, as well as any possible other error condition that may be triggered at runtime.
--- drivers/gpu/drm/imx/imx-ldb.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/gpu/drm/imx/imx-ldb.c +12 -0
@@ -197,6 +197,12 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)int dual = ldb->ldb_ctrl &LDB_SPLIT_MODE_EN ;int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder); +if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__); +return ; + } +drm_panel_prepare (imx_ldb_ch->panel);if (dual) {
@@ -255,6 +261,12 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder);u32 bus_format = imx_ldb_ch->bus_format; +if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__); +return ; + } +if (mode->clock >170000 ) {dev_warn (ldb->dev,"%s: mode exceeds 170 MHz pixel clock\n" , __func__);
Signature · 6 lines
2.29.2 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Fabio Estevam
reviewerHi Arnd,
Quoted 8 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
When
CONFIG_OFis disabled, building with 'make W=1' produces warnings about out of bounds array access:
drivers/gpu/drm/imx/imx-ldb.c: In function 'imx_ldb_set_clock.constprop':drivers/gpu/drm/imx/imx-ldb.c:186:8: error: array subscript -22 is below array bounds of 'struct clk *[4]' [-Werror=array-bounds]
What about making the driver depend on OF instead (like it is done in DRM_IMX_HDMI) ?
drivers/gpu/drm/imx/Kconfig +1 -1
@@ -27,7 +27,7 @@ config DRM_IMX_TVE config DRM_IMX_LDB tristate "Support for LVDS displays" - depends on DRM_IMX && MFD_SYSCON + depends on DRM_IMX && MFD_SYSCON && OF depends on COMMON_CLK select DRM_PANEL help
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Fabio,
Quoted 5 lines · Fabio Estevam
Hi Arnd,
Quoted 2 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
Quoted 8 lines
Quoted 5 lines
When
CONFIG_OFis disabled, building with 'make W=1' produces warnings about out of bounds array access:
drivers/gpu/drm/imx/imx-ldb.c: In function 'imx_ldb_set_clock.constprop':drivers/gpu/drm/imx/imx-ldb.c:186:8: error: array subscript -22 is below array bounds of 'struct clk *[4]' [-Werror=array-bounds]What about making the driver depend on OF instead (like it is done in
DRM_IMX_HDMI) ?
The below patch made DRM_IMX_HDMI depend on OF, because of_drm_find_bridge() is not defined when OF is disabled.
drm/imx: dw_hdmi-imx: depend on OF to fix randconfig compile tests on x86_64
It doesn't look like DRM_IMX_LDB is in the same case.
Moreover, even if OF is enabled, drm_of_encoder_active_endpoint() is likely to return -EINVAL. So, it looks ok to add an error check.
Regards,
Liu Ying
drivers/gpu/drm/imx/Kconfig config DRM_IMX_TVE · line 33
Quoted 12 lines
drivers/gpu/drm/imx/Kconfig +1
-1@@ -27,7 +27,7 @@ config DRM_IMX_TVE config DRM_IMX_LDB tristate "Support for LVDS displays" - depends on DRM_IMX && MFD_SYSCON + depends on DRM_IMX && MFD_SYSCON && OF depends on COMMON_CLK select DRM_PANEL help
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 11 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
When
CONFIG_OFis disabled, building with 'make W=1' produces warnings about out of bounds array access:
drivers/gpu/drm/imx/imx-ldb.c: In function 'imx_ldb_set_clock.constprop':drivers/gpu/drm/imx/imx-ldb.c:186:8: error: array subscript -22 is below array bounds of 'struct clk *[4]' [-Werror=array-bounds]Add an error check before the index is used, which helps with the warning, as well as any possible other error condition that may be triggered at runtime.
[]
drivers/gpu/drm/imx/imx-ldb.c
Quoted 1 line
drivers/gpu/drm/imx/imx-ldb.c +0
-0
[]
drivers/gpu/drm/imx/imx-ldb.c static void imx_ldb_encoder_enable(struct drm_encoder *encoder) · line 202
Quoted 7 lines
drivers/gpu/drm/imx/imx-ldb.c +3
-0@@ -197,6 +197,12 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder) int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder); +if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__);
trivia:
Any real reason to make this 2 lines? It fits nicely in 80 chars. Maybe:
dev_warn(ldb->dev, "%s: invalid mux: %d\n", __func__, mux);
or maybe:
dev_warn(ldb->dev, "%s: invalid mux: %pe\n", __func__, ERR_PTR(mux));
drivers/gpu/drm/imx/imx-ldb.c imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,
Quoted 1 line
drivers/gpu/drm/imx/imx-ldb.c +0
-0@@ -255,6 +261,12 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,
[]
drivers/gpu/drm/imx/imx-ldb.c static void imx_ldb_encoder_enable(struct drm_encoder *encoder) · line 202
Quoted 3 lines
drivers/gpu/drm/imx/imx-ldb.c +3
-0+if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__);
etc...
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 25 lines · Joe Perches
Quoted 11 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
When
CONFIG_OFis disabled, building with 'make W=1' produces warnings about out of bounds array access:
drivers/gpu/drm/imx/imx-ldb.c: In function 'imx_ldb_set_clock.constprop':drivers/gpu/drm/imx/imx-ldb.c:186:8: error: array subscript -22 is below array bounds of 'struct clk *[4]' [-Werror=array-bounds]Add an error check before the index is used, which helps with the warning, as well as any possible other error condition that may be triggered at runtime.
[]
drivers/gpu/drm/imx/imx-ldb.c
Quoted 1 line
drivers/gpu/drm/imx/imx-ldb.c +0
-0[]
drivers/gpu/drm/imx/imx-ldb.c static void imx_ldb_encoder_enable(struct drm_encoder *encoder) · line 202
Quoted 7 lines
drivers/gpu/drm/imx/imx-ldb.c +3
-0@@ -197,6 +197,12 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)int dual = ldb->ldb_ctrl &LDB_SPLIT_MODE_EN ;int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder); +if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__);trivia:
Quoted 8 lines
Any real reason to make this 2 lines? It fits nicely in 80 chars. Maybe:
dev_warn(ldb->dev, "%s: invalid mux: %d\n", __func__, mux);or maybe:
dev_warn(ldb->dev, "%s: invalid mux: %pe\n", __func__, ERR_PTR(mux));
+1
The second one looks better as it's more informative.
Regards,
Liu Ying
Quoted 10 lines
drivers/gpu/drm/imx/imx-ldb.c imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,
Quoted 2 lines
drivers/gpu/drm/imx/imx-ldb.c +0
-0@@ -255,6 +261,12 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,[]
drivers/gpu/drm/imx/imx-ldb.c static void imx_ldb_encoder_enable(struct drm_encoder *encoder) · line 202
Quoted 3 lines
drivers/gpu/drm/imx/imx-ldb.c +3
-0+if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__);etc...
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Arnd,
Thanks for your patch.
It would be good to improve the patch's head line to something like:
drm/imx: imx-ldb: fix out of bounds array access warning
Regards,
Liu Ying
Quoted 37 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
When
CONFIG_OFis disabled, building with 'make W=1' produces warnings about out of bounds array access:
drivers/gpu/drm/imx/imx-ldb.c: In function 'imx_ldb_set_clock.constprop':drivers/gpu/drm/imx/imx-ldb.c:186:8: error: array subscript -22 is below array bounds of 'struct clk *[4]' [-Werror=array-bounds]Add an error check before the index is used, which helps with the warning, as well as any possible other error condition that may be triggered at runtime.
Signed-off-by Arnd Bergmann <[email protected]>--- drivers/gpu/drm/imx/imx-ldb.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)drivers/gpu/drm/imx/imx-ldb.c +6
-0@@ -197,6 +197,12 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)int dual = ldb->ldb_ctrl &LDB_SPLIT_MODE_EN ;int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder); +if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__); +return ; + } +drm_panel_prepare (imx_ldb_ch->panel);if (dual) {@@ -255,6 +261,12 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder);u32 bus_format = imx_ldb_ch->bus_format;
drivers/gpu/drm/imx/imx-ldb.c imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder, · line 272
Quoted 10 lines
drivers/gpu/drm/imx/imx-ldb.c +6
-0+if (mux <0 ) { +dev_warn (ldb->dev, +"%s: invalid mux\n" , __func__); +return ; + } +if (mode->clock >170000 ) {dev_warn (ldb->dev,"%s: mode exceeds 170 MHz pixel clock\n" , __func__);
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel