pwm: imx: Prevent NULL pointer dereference
Subsystems (2)
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
@@ -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
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
@@ -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
PATCH 2/2 pwm: imx: Remove unreachable code
Quoted 19 lines · Axel Lin
The break after return is unreachable code, remove it.
Signed-off-by Axel Lin <[email protected]>--- drivers/pwm/pwm-imx-util.c | 4 ---- 1 file changed, 4 deletions(-)drivers/pwm/pwm-imx-util.c +0
-1@@ -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 =====================================================================
PATCH 2/2 pwm: imx: Remove unreachable code
In reply to Axel LinHello Axel,
Am 23.05.2015 09:17, schrieb Axel Lin:
Quoted 6 lines
The break after return is unreachable code, remove it.
Signed-off-by Axel Lin <[email protected]>--- 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@@ -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
PATCH 2/2 pwm: imx: Remove unreachable code
In reply to Axel LinQuoted 19 lines · Axel Lin
The break after return is unreachable code, remove it.
Signed-off-by Axel Lin <[email protected]>--- drivers/pwm/pwm-imx-util.c | 4 ---- 1 file changed, 4 deletions(-)drivers/pwm/pwm-imx-util.c +0
-1@@ -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 =====================================================================
PATCH 1/2 pwm: imx: Prevent NULL pointer dereference
In reply to Axel LinHi Axel,
Quoted 44 lines · Axel Lin
pwm_id_to_reg()can return NULL, so add NULL testing to prevent NULL pointer dereference.Signed-off-by Axel Lin <[email protected]>--- drivers/pwm/pwm-imx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)drivers/pwm/pwm-imx.c +9
-0@@ -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 =====================================================================
PATCH 1/2 pwm: imx: Prevent NULL pointer dereference
In reply to Axel LinHello 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.Signed-off-by Axel Lin <[email protected]>--- drivers/pwm/pwm-imx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
bye,
Heiko
Quoted 45 lines
drivers/pwm/pwm-imx.c +12
-0@@ -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
PATCH 1/2 pwm: imx: Prevent NULL pointer dereference
In reply to Axel LinQuoted 5 lines · Axel Lin
pwm_id_to_reg()can return NULL, so add NULL testing to prevent NULL pointer dereference.Signed-off-by Axel Lin <[email protected]>---
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 =====================================================================