pwm: meson: fix allocation of meson_pwm_channel array
Subsystems (2)
Martin Blumenstingl
reviewerPATCH 1/1 pwm: meson: fix allocation of meson_pwm_channel array
Using the pwm-meson driver on the 32-bit SoCs causes memory corruption. The result are some hard-to-explain errors, for example devm_clk_register crashes with a NULL dereference somewhere deep in the common clock framework code.
In some cases the kernel even refused to boot when any of the PWM controllers were enables on Meson8b.
The root cause seems to be an incorrect memory size in the devm_kcalloc call in meson_pwm_probe. The code allocates an array of meson_pwm_channel structs, but the size given is the size of the meson_pwm struct (which seems like a small copy-and-paste error, as meson_pwm is allocated a few lines above).
Even with this typo the code seemed to work fine on the 64-bit GX SoCs (maybe due to the structs having the same size in the compiled result, but I haven't checked this further).
--- drivers/pwm/pwm-meson.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/pwm/pwm-meson.c +2 -2
@@ -541,8 +541,8 @@ static int meson_pwm_probe(struct platform_device *pdev) meson->data =of_device_get_match_data (&pdev->dev); meson->inverter_mask =BIT (meson->chip.npwm) -1 ; - channels =devm_kcalloc (&pdev->dev, meson->chip.npwm,sizeof (*meson), -GFP_KERNEL ); + channels =devm_kcalloc (&pdev->dev, meson->chip.npwm, +sizeof (*channels),GFP_KERNEL );if (!channels)return -ENOMEM ;
Signature · 1 line
2.17.0
Thierry Reding
AppliedPATCH 1/1 pwm: meson: fix allocation of meson_pwm_channel array
Quoted 16 lines · Martin Blumenstingl
Using the pwm-meson driver on the 32-bit SoCs causes memory corruption. The result are some hard-to-explain errors, for example
devm_clk_registercrashes with a NULL dereference somewhere deep in the common clock framework code.
In some cases the kernel even refused to boot when any of the PWM controllers were enables on Meson8b.The root cause seems to be an incorrect memory size in the
devm_kcalloccall inmeson_pwm_probe. The code allocates an array ofmeson_pwm_channelstructs, but the size given is the size of themeson_pwmstruct (which seems like a small copy-and-paste error, asmeson_pwmis allocated a few lines above).
Even with this typo the code seemed to work fine on the 64-bit GX SoCs (maybe due to the structs having the same size in the compiled result, but I haven't checked this further).
Quoted 5 lines
Fixes 211ed630753d2f ("pwm: Add support for Meson PWM Controller")Signed-off-by Martin Blumenstingl <[email protected]>--- drivers/pwm/pwm-meson.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Applied, thanks.
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-amlogic/attachments/20180430/cdaf4204/attachment.sig>