Skip to contentSkip to conversation

video: ipu: Fix dereferencing NULL pointer problem

PATCH New Peng Fan 2 participants 5 messages Jan 2, 2018 – Jan 3, 2018 Framebuffer layer

lore
Share & tools
lore

Peng Fan

author
#0 lore raw

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.

---
 drivers/video/ipu_common.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/video/ipu_common.c +4 -0
index 96229da502..b3b09e6982 100644
@@ -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;
 }
 
Signature · 1 line
2.14.1
author
#1 lore raw

PATCH 2/2 video: Support multiple lines version string display

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.

---
 drivers/video/cfb_console.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)
drivers/video/cfb_console.c +23 -7
index 74cc20d653..0b25897062 100644
@@ -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);
 
Signature · 1 line
2.14.1
#2 lore raw

PATCH 2/2 video: Support multiple lines version string display

Quoted 11 lines · On Tue, 2 Jan 2018 15:25:37 +0800 Peng Fan peng.fan at 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.

---
 drivers/video/cfb_console.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

applied to u-boot-video/master, thanks!

--
Anatolij

#3 lore raw

PATCH v2 1/2 video: ipu: Fix dereferencing NULL pointer problem

In reply to Peng Fan

From: Peng Fan <[email protected]>

The clk_set_rate function dereferences the clk pointer without checking whether it is NULL. This may cause problem when clk is NULL.

---
Changes in v2:
- move the NULL check to top of function

 drivers/video/ipu_common.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/video/ipu_common.c +5 -1
index 96229da502..889085aa76 100644
@@ -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;
 }
 
Signature · 1 line
2.11.0
#4 lore raw

PATCH v2 1/2 video: ipu: Fix dereferencing NULL pointer problem

Quoted 5 lines · On Wed, 3 Jan 2018 12:20:49 +0100 Anatolij Gustschin agust at denx.de wrote:

From: Peng Fan <[email protected]>

The clk_set_rate function dereferences the clk pointer without checking whether it is NULL. This may cause problem when clk is NULL.

Quoted 8 lines

---
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