lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 03 Feb 2016 20:11:05 +0100 From: Paul Bolle <pebolle@...cali.nl> To: Dmitry Vyukov <dvyukov@...gle.com> Cc: Karsten Keil <isdn@...ux-pingi.de>, "David S. Miller" <davem@...emloft.net>, gigaset307x-common@...ts.sourceforge.net, netdev@...r.kernel.org, linux-kernel@...r.kernel.org, syzkaller <syzkaller@...glegroups.com>, Kostya Serebryany <kcc@...gle.com>, Alexander Potapenko <glider@...gle.com>, Sasha Levin <sasha.levin@...cle.com> Subject: Re: gigaset: memory leak in gigaset_initcshw Hi Dmitry, On wo, 2016-02-03 at 17:16 +0100, Paul Bolle wrote: > The above should provide me with enough information to figure out > what's going on here. I've instrumented ser_gigaset with some printk's. Basically I added the stuff pasted at the end of this message. In 10.000 runs of the program syzkaller generated the added printk's suggest that struct ser_cardstate is freed every time. (Note that this was done on a machine that, probably like the VM syzkaller was running in, doesn't have the clunky hardware that this driver manages attached.) Before I dive deeper into this: can you reproduce this leak? Is it perhaps a one in gazillion runs thing? Do you have the logs of a run that warned about this leak at hand? Thanks, Paul Bolle @@ -375,9 +377,12 @@ static void gigaset_device_release(struct device *dev) { struct cardstate *cs = dev_get_drvdata(dev); - if (!cs) + if (!cs) { + pr_info("%s: no cardstate", __func__); return; + } dev_set_drvdata(dev, NULL); + pr_info("%s: kfree(%p)", __func__, cs->hw.ser); kfree(cs->hw.ser); cs->hw.ser = NULL; } @@ -392,6 +397,7 @@ static int gigaset_initcshw(struct cardstate *cs) struct ser_cardstate *scs; scs = kzalloc(sizeof(struct ser_cardstate), GFP_KERNEL); + pr_info("%s: scs = %p", __func__, scs); if (!scs) { pr_err("out of memory\n"); return -ENOMEM;
Powered by blists - more mailing lists