Re: gigaset: memory leak in gigaset_initcshw
From: Paul Bolle <hidden>
Date: 2016-02-05 18:36:07
Also in:
lkml
On vr, 2016-02-05 at 17:06 +0100, Paul Bolle wrote:
If that would happen, then cs can be reused while the previousquoted
cs->hw.ser is not freed yet. Just a guess.I'll have to ponder on that a bit, sorry.
This is from the hit-the-code-until-it-confesses department:
--- a/drivers/isdn/gigaset/ser-gigaset.c
+++ b/drivers/isdn/gigaset/ser-gigaset.c@@ -373,13 +373,9 @@ static void gigaset_freecshw(struct cardstate *cs) static void gigaset_device_release(struct device *dev) { - struct cardstate *cs = dev_get_drvdata(dev); - - if (!cs) - return; + struct ser_cardstate *scs = dev_get_drvdata(dev); dev_set_drvdata(dev, NULL); - kfree(cs->hw.ser); - cs->hw.ser = NULL; + kfree(scs); } /*
@@ -408,7 +404,7 @@ static int gigaset_initcshw(struct cardstate *cs) cs->hw.ser = NULL; return rc; } - dev_set_drvdata(&cs->hw.ser->dev.dev, cs); + dev_set_drvdata(&cs->hw.ser->dev.dev, scs); tasklet_init(&cs->write_tasklet, gigaset_modem_fill, (unsigned long) cs);
Does that make any difference? Paul Bolle