[U-Boot] [PATCH 1/2] video: ipu: Fix dereferencing NULL pointer problem

The clk_set_rate function dereferences the clk pointer without checking whether it is NULL. This may cause problem when clk is NULL.
Signed-off-by: Peng Fan peng.fan@nxp.com --- drivers/video/ipu_common.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/video/ipu_common.c b/drivers/video/ipu_common.c index 96229da502..b3b09e6982 100644 --- a/drivers/video/ipu_common.c +++ b/drivers/video/ipu_common.c @@ -134,6 +134,10 @@ int clk_set_rate(struct clk *clk, unsigned long rate) { if (clk && clk->set_rate) clk->set_rate(clk, rate); + + if (!clk) + return 0; + return clk->rate; }

The calculation of left space for version string is not correct, should use VIDEO_COLS not VIDEO_LINE_LEN / 2, otherwise we will get larger space than actual have and cause string to overlay logo picture.
Also current version string display only supports two lines words at max. This also causes overlay when the LCD pixel colume size is not enough.
Signed-off-by: Peng Fan peng.fan@nxp.com --- drivers/video/cfb_console.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index 74cc20d653..0b25897062 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -1900,16 +1900,32 @@ static void *video_logo(void) sprintf(info, " %s", version_string);
#ifndef CONFIG_HIDE_LOGO_VERSION - space = (VIDEO_LINE_LEN / 2 - VIDEO_INFO_X) / VIDEO_FONT_WIDTH; + space = (VIDEO_COLS - VIDEO_INFO_X) / VIDEO_FONT_WIDTH; len = strlen(info);
if (len > space) { - video_drawchars(VIDEO_INFO_X, VIDEO_INFO_Y, - (uchar *) info, space); - video_drawchars(VIDEO_INFO_X + VIDEO_FONT_WIDTH, - VIDEO_INFO_Y + VIDEO_FONT_HEIGHT, - (uchar *) info + space, len - space); - y_off = 1; + int xx = VIDEO_INFO_X, yy = VIDEO_INFO_Y; + uchar *p = (uchar *) info; + + while (len) { + if (len > space) { + video_drawchars(xx, yy, p, space); + len -= space; + + p = (uchar *)p + space; + + if (!y_off) { + xx += VIDEO_FONT_WIDTH; + space--; + } + yy += VIDEO_FONT_HEIGHT; + + y_off++; + } else { + video_drawchars(xx, yy, p, len); + len = 0; + } + } } else video_drawstring(VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *) info);

On Tue, 2 Jan 2018 15:25:37 +0800 Peng Fan peng.fan@nxp.com wrote:
The calculation of left space for version string is not correct, should use VIDEO_COLS not VIDEO_LINE_LEN / 2, otherwise we will get larger space than actual have and cause string to overlay logo picture.
Also current version string display only supports two lines words at max. This also causes overlay when the LCD pixel colume size is not enough.
Signed-off-by: Peng Fan peng.fan@nxp.com
drivers/video/cfb_console.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-)
applied to u-boot-video/master, thanks!
-- Anatolij

From: Peng Fan peng.fan@nxp.com
The clk_set_rate function dereferences the clk pointer without checking whether it is NULL. This may cause problem when clk is NULL.
Signed-off-by: Peng Fan peng.fan@nxp.com Signed-off-by: Anatolij Gustschin agust@denx.de --- Changes in v2: - move the NULL check to top of function
drivers/video/ipu_common.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/video/ipu_common.c b/drivers/video/ipu_common.c index 96229da502..889085aa76 100644 --- a/drivers/video/ipu_common.c +++ b/drivers/video/ipu_common.c @@ -132,8 +132,12 @@ struct clk *clk_get_parent(struct clk *clk)
int clk_set_rate(struct clk *clk, unsigned long rate) { - if (clk && clk->set_rate) + if (!clk) + return 0; + + if (clk->set_rate) clk->set_rate(clk, rate); + return clk->rate; }

On Wed, 3 Jan 2018 12:20:49 +0100 Anatolij Gustschin agust@denx.de wrote:
From: Peng Fan peng.fan@nxp.com
The clk_set_rate function dereferences the clk pointer without checking whether it is NULL. This may cause problem when clk is NULL.
Signed-off-by: Peng Fan peng.fan@nxp.com Signed-off-by: Anatolij Gustschin agust@denx.de
Changes in v2:
- move the NULL check to top of function
drivers/video/ipu_common.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
applied to u-boot-video/master, thanks!
-- Anatolij
participants (2)
-
Anatolij Gustschin
-
Peng Fan