Skip to contentSkip to conversation

pwm: imx: Prevent NULL pointer dereference

PATCH New Axel Lin 3 participants 8 messages May 23, 2015 – May 26, 2015

Subsystems (2)
lore
Share & tools
lore

Axel Lin

author
#0 lore raw

PATCH 1/2 pwm: imx: Prevent NULL pointer dereference

pwm_id_to_reg() can return NULL, so add NULL testing to prevent NULL pointer dereference.

---
 drivers/pwm/pwm-imx.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
drivers/pwm/pwm-imx.c +12 -0
index 40bf027..47799fc 100644
@@ -18,6 +18,9 @@ int pwm_init(int pwm_id, int div, int invert)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return -1;
+
 	writel(0, &pwm->ir);
 	return 0;
 }
@@ -28,6 +31,9 @@ int pwm_config(int pwm_id, int duty_ns, int period_ns)
 	unsigned long period_cycles, duty_cycles, prescale;
 	u32 cr;
 
+	if (!pwm)
+		return -1;
+
 	pwm_imx_get_parms(period_ns, duty_ns, &period_cycles, &duty_cycles,
 			  &prescale);
 
@@ -47,6 +53,9 @@ int pwm_enable(int pwm_id)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return -1;
+
 	setbits_le32(&pwm->cr, PWMCR_EN);
 	return 0;
 }
@@ -55,5 +64,8 @@ void pwm_disable(int pwm_id)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return;
+
 	clrbits_le32(&pwm->cr, PWMCR_EN);
 }
Signature · 1 line
2.1.0
author
#1 lore raw

PATCH 2/2 pwm: imx: Remove unreachable code

The break after return is unreachable code, remove it.

---
 drivers/pwm/pwm-imx-util.c | 4 ----
 1 file changed, 4 deletions(-)
drivers/pwm/pwm-imx-util.c +0 -4
index 79d86028..f92c370 100644
@@ -21,16 +21,12 @@ struct pwm_regs *pwm_id_to_reg(int pwm_id)
 	switch (pwm_id) {
 	case 0:
 		return (struct pwm_regs *)PWM1_BASE_ADDR;
-		break;
 	case 1:
 		return (struct pwm_regs *)PWM2_BASE_ADDR;
-		break;
 	case 2:
 		return (struct pwm_regs *)PWM3_BASE_ADDR;
-		break;
 	case 3:
 		return (struct pwm_regs *)PWM4_BASE_ADDR;
-		break;
 	default:
 		printf("unknown pwm_id: %d\n", pwm_id);
 		break;
Signature · 1 line
2.1.0
#2 lore raw

PATCH 2/2 pwm: imx: Remove unreachable code

Quoted 19 lines · Axel Lin

The break after return is unreachable code, remove it.

---
 drivers/pwm/pwm-imx-util.c | 4 ----
 1 file changed, 4 deletions(-)
drivers/pwm/pwm-imx-util.c +0 -1
index 79d86028..f92c370 100644
@@ -21,16 +21,12 @@ struct pwm_regs *pwm_id_to_reg(int pwm_id)
 	switch (pwm_id) {
 	case 0:
 		return (struct pwm_regs *)PWM1_BASE_ADDR;
-		break;
 	case 1:
 		return (struct pwm_regs *)PWM2_BASE_ADDR;

drivers/pwm/pwm-imx-util.c struct pwm_regs *pwm_id_to_reg(int pwm_id) · line 32

Quoted 10 lines
drivers/pwm/pwm-imx-util.c +0 -3
-		break;
 	case 2:
 		return (struct pwm_regs *)PWM3_BASE_ADDR;
-		break;
 	case 3:
 		return (struct pwm_regs *)PWM4_BASE_ADDR;
-		break;
 	default:
 		printf("unknown pwm_id: %d\n", pwm_id);
 		break;

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
#3 lore raw

PATCH 2/2 pwm: imx: Remove unreachable code

In reply to Axel Lin

Hello Axel,

Am 23.05.2015 09:17, schrieb Axel Lin:

Quoted 6 lines

The break after return is unreachable code, remove it.

---
  drivers/pwm/pwm-imx-util.c | 4 ----
  1 file changed, 4 deletions(-)

bye,
Heiko

Quoted 23 lines
drivers/pwm/pwm-imx-util.c +0 -4
index 79d86028..f92c370 100644
@@ -21,16 +21,12 @@ struct pwm_regs *pwm_id_to_reg(int pwm_id)
  	switch (pwm_id) {
  	case 0:
  		return (struct pwm_regs *)PWM1_BASE_ADDR;
-		break;
  	case 1:
  		return (struct pwm_regs *)PWM2_BASE_ADDR;
-		break;
  	case 2:
  		return (struct pwm_regs *)PWM3_BASE_ADDR;
-		break;
  	case 3:
  		return (struct pwm_regs *)PWM4_BASE_ADDR;
-		break;
  	default:
  		printf("unknown pwm_id: %d\n", pwm_id);
  		break;
Signature · 2 lines
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#4 lore raw

PATCH 2/2 pwm: imx: Remove unreachable code

In reply to Axel Lin
Quoted 19 lines · Axel Lin

The break after return is unreachable code, remove it.

---
 drivers/pwm/pwm-imx-util.c | 4 ----
 1 file changed, 4 deletions(-)
drivers/pwm/pwm-imx-util.c +0 -1
index 79d86028..f92c370 100644
@@ -21,16 +21,12 @@ struct pwm_regs *pwm_id_to_reg(int pwm_id)
 	switch (pwm_id) {
 	case 0:
 		return (struct pwm_regs *)PWM1_BASE_ADDR;
-		break;
 	case 1:
 		return (struct pwm_regs *)PWM2_BASE_ADDR;

drivers/pwm/pwm-imx-util.c struct pwm_regs *pwm_id_to_reg(int pwm_id) · line 32

Quoted 10 lines
drivers/pwm/pwm-imx-util.c +0 -3
-		break;
 	case 2:
 		return (struct pwm_regs *)PWM3_BASE_ADDR;
-		break;
 	case 3:
 		return (struct pwm_regs *)PWM4_BASE_ADDR;
-		break;
 	default:
 		printf("unknown pwm_id: %d\n", pwm_id);
 		break;

Applied to u-boot-imx, thanks!

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
#5 lore raw

PATCH 1/2 pwm: imx: Prevent NULL pointer dereference

In reply to Axel Lin

Hi Axel,

Quoted 44 lines · Axel Lin

pwm_id_to_reg() can return NULL, so add NULL testing to prevent NULL pointer dereference.

---
 drivers/pwm/pwm-imx.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
drivers/pwm/pwm-imx.c +9 -0
index 40bf027..47799fc 100644
@@ -18,6 +18,9 @@ int pwm_init(int pwm_id, int div, int invert)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return -1;
+
 	writel(0, &pwm->ir);
 	return 0;
 }
@@ -28,6 +31,9 @@ int pwm_config(int pwm_id, int duty_ns, int period_ns)
 	unsigned long period_cycles, duty_cycles, prescale;
 	u32 cr;
 
+	if (!pwm)
+		return -1;
+
 	pwm_imx_get_parms(period_ns, duty_ns, &period_cycles, &duty_cycles,
 			  &prescale);
 
@@ -47,6 +53,9 @@ int pwm_enable(int pwm_id)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return -1;
+
 	setbits_le32(&pwm->cr, PWMCR_EN);
 	return 0;
 }

drivers/pwm/pwm-imx.c void pwm_disable(int pwm_id) · line 71

Quoted 8 lines
drivers/pwm/pwm-imx.c +3 -0
@@ -55,5 +64,8 @@ void pwm_disable(int pwm_id)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return;
+
 	clrbits_le32(&pwm->cr, PWMCR_EN);
 }

Right !

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
#6 lore raw

PATCH 1/2 pwm: imx: Prevent NULL pointer dereference

In reply to Axel Lin

Hello Axel,

Am 23.05.2015 09:16, schrieb Axel Lin:

Quoted 7 lines

pwm_id_to_reg() can return NULL, so add NULL testing to prevent NULL pointer dereference.

---
  drivers/pwm/pwm-imx.c | 12 ++++++++++++
  1 file changed, 12 insertions(+)

bye,
Heiko

Quoted 45 lines
drivers/pwm/pwm-imx.c +12 -0
index 40bf027..47799fc 100644
@@ -18,6 +18,9 @@ int pwm_init(int pwm_id, int div, int invert)
  {
  	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return -1;
+
  	writel(0, &pwm->ir);
  	return 0;
  }
@@ -28,6 +31,9 @@ int pwm_config(int pwm_id, int duty_ns, int period_ns)
  	unsigned long period_cycles, duty_cycles, prescale;
  	u32 cr;
 
+	if (!pwm)
+		return -1;
+
  	pwm_imx_get_parms(period_ns, duty_ns, &period_cycles, &duty_cycles,
  			  &prescale);
 
@@ -47,6 +53,9 @@ int pwm_enable(int pwm_id)
  {
  	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return -1;
+
  	setbits_le32(&pwm->cr, PWMCR_EN);
  	return 0;
  }
@@ -55,5 +64,8 @@ void pwm_disable(int pwm_id)
  {
  	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
 
+	if (!pwm)
+		return;
+
  	clrbits_le32(&pwm->cr, PWMCR_EN);
  }
Signature · 2 lines
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#7 lore raw

PATCH 1/2 pwm: imx: Prevent NULL pointer dereference

In reply to Axel Lin
Quoted 5 lines · Axel Lin

pwm_id_to_reg() can return NULL, so add NULL testing to prevent NULL pointer dereference.

---

Applied to u-boot-imx, thanks!

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================