From: "Jörn Engel" <joern@wohnheim.fh-wedel.de>
To: David Yu Chen <dychen@stanford.edu>
Cc: linux-kernel@vger.kernel.org, mc@cs.stanford.edu,
David Woodhouse <dwmw2@infradead.org>,
linux-mtd@lists.infradead.org
Subject: Re: [CHECKER] 32 Memory Leaks on Error Paths
Date: Tue, 16 Sep 2003 08:55:53 +0200 [thread overview]
Message-ID: <20030916065553.GA12329@wohnheim.fh-wedel.de> (raw)
In-Reply-To: <200309160435.h8G4ZkQM009953@elaine4.Stanford.EDU>
On Mon, 15 September 2003 21:35:46 -0700, David Yu Chen wrote:
>
> [FILE: 2.6.0-test5/drivers/mtd/chips/cfi_cmdset_0020.c]
> [FUNC: cfi_staa_setup]
> [LINES: 191-211]
> [VAR: mtd]
> 186: struct mtd_info *mtd;
> 187: unsigned long offset = 0;
> 188: int i,j;
> 189: unsigned long devsize = (1<<cfi->cfiq->DevSize) * cfi->interleave;
> 190:
> START -->
> 191: mtd = kmalloc(sizeof(*mtd), GFP_KERNEL);
> 192: //printk(KERN_DEBUG "number of CFI chips: %d\n", cfi->numchips);
> 193:
> 194: if (!mtd) {
> 195: printk(KERN_ERR "Failed to allocate memory for MTD device\n");
> 196: kfree(cfi->cmdset_priv);
> ... DELETED 9 lines ...
> 206: mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info)
> 207: * mtd->numeraseregions, GFP_KERNEL);
> 208: if (!mtd->eraseregions) {
> 209: printk(KERN_ERR "Failed to allocate memory for MTD erase region info\n");
> 210: kfree(cfi->cmdset_priv);
> END -->
> 211: return NULL;
> 212: }
> 213:
> 214: for (i=0; i<cfi->cfiq->NumEraseRegions; i++) {
> 215: unsigned long ernum, ersize;
> 216: ersize = ((cfi->cfiq->EraseRegionInfo[i] >> 8) & ~0xff) * cfi->interleave;
Valid.
> [FILE: 2.6.0-test5/drivers/mtd/chips/cfi_cmdset_0020.c]
> [FUNC: cfi_staa_setup]
> [LINES: 191-235]
> [VAR: mtd]
> 186: struct mtd_info *mtd;
> 187: unsigned long offset = 0;
> 188: int i,j;
> 189: unsigned long devsize = (1<<cfi->cfiq->DevSize) * cfi->interleave;
> 190:
> START -->
> 191: mtd = kmalloc(sizeof(*mtd), GFP_KERNEL);
> 192: //printk(KERN_DEBUG "number of CFI chips: %d\n", cfi->numchips);
> 193:
> 194: if (!mtd) {
> 195: printk(KERN_ERR "Failed to allocate memory for MTD device\n");
> 196: kfree(cfi->cmdset_priv);
> ... DELETED 33 lines ...
> 230: if (offset != devsize) {
> 231: /* Argh */
> 232: printk(KERN_WARNING "Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset, devsize);
> 233: kfree(mtd->eraseregions);
> 234: kfree(cfi->cmdset_priv);
> END -->
> 235: return NULL;
> 236: }
> 237:
> 238: for (i=0; i<mtd->numeraseregions;i++){
> 239: printk(KERN_DEBUG "%d: offset=0x%x,size=0x%x,blocks=%d\n",
> 240: i,mtd->eraseregions[i].offset,
Also valid.
> looks like checking for mtdblks instead of mtdblk
> [FILE: 2.6.0-test5/drivers/mtd/mtdblock.c]
> [FUNC: mtdblock_open]
> [LINES: 277-279]
> [VAR: mtdblk]
> 272: mtdblks[dev]->count++;
> 273: return 0;
> 274: }
> 275:
> 276: /* OK, it's not open. Create cache info for it */
> START -->
> 277: mtdblk = kmalloc(sizeof(struct mtdblk_dev), GFP_KERNEL);
> 278: if (!mtdblks)
> END -->
> 279: return -ENOMEM;
> 280:
> 281: memset(mtdblk, 0, sizeof(*mtdblk));
> 282: mtdblk->count = 1;
> 283: mtdblk->mtd = mtd;
> 284:
Invalid. This is quite an obvious false positive, at least if your
algorithm checks for possible value ranges.
> [FILE: 2.6.0-test5/fs/jffs2/scan.c]
> [FUNC: jffs2_scan_medium]
> [LINES: 98-109]
> [VAR: flashbuf]
> 93: buf_size = c->sector_size;
> 94: else
> 95: buf_size = PAGE_SIZE;
> 96:
> 97: D1(printk(KERN_DEBUG "Allocating readbuf of %d bytes\n", buf_size));
> START -->
> 98: flashbuf = kmalloc(buf_size, GFP_KERNEL);
> 99: if (!flashbuf)
> 100: return -ENOMEM;
> 101: }
> 102:
> 103: for (i=0; i<c->nr_blocks; i++) {
> 104: struct jffs2_eraseblock *jeb = &c->blocks[i];
> 105:
> 106: ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset), buf_size);
> 107:
> 108: if (ret < 0)
> END -->
> 109: return ret;
> 110:
> 111: ACCT_PARANOIA_CHECK(jeb);
> 112:
> 113: /* Now decide which list to put it on */
> 114: switch(ret) {
Valid. And not trivial to fix.
> [FILE: 2.6.0-test5/fs/jffs2/scan.c]
> [FUNC: jffs2_scan_medium]
> [LINES: 98-233]
> [VAR: flashbuf]
> 93: buf_size = c->sector_size;
> 94: else
> 95: buf_size = PAGE_SIZE;
> 96:
> 97: D1(printk(KERN_DEBUG "Allocating readbuf of %d bytes\n", buf_size));
> START -->
> 98: flashbuf = kmalloc(buf_size, GFP_KERNEL);
> 99: if (!flashbuf)
> 100: return -ENOMEM;
> 101: }
> 102:
> 103: for (i=0; i<c->nr_blocks; i++) {
> ... DELETED 124 lines ...
> 228: }
> 229: if (c->nr_erasing_blocks) {
> 230: if ( !c->used_size && ((empty_blocks+bad_blocks)!= c->nr_blocks || bad_blocks == c->nr_blocks) ) {
> 231: printk(KERN_NOTICE "Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes\n");
> 232: printk(KERN_NOTICE "empty_blocks %d, bad_blocks %d, c->nr_blocks %d\n",empty_blocks,bad_blocks,c->nr_blocks);
> END -->
> 233: return -EIO;
> 234: }
> 235: jffs2_erase_pending_trigger(c);
> 236: }
> 237: if (buf_size)
> 238: kfree(flashbuf);
Same one, basically.
Jörn
--
Geld macht nicht glücklich.
Glück macht nicht satt.
next prev parent reply other threads:[~2003-09-16 6:56 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-09-16 4:35 David Yu Chen
2003-09-16 6:40 ` Neil Brown
2003-09-16 6:55 ` Jörn Engel [this message]
2003-09-16 7:21 ` [PATCH] fix memleak in fs/jffs2/scan.c (was: re: [CHECKER] 32 Memory Leaks on Error Paths) Jörn Engel
2003-09-16 7:32 ` [CHECKER] 32 Memory Leaks on Error Paths Jörn Engel
2003-09-16 8:51 ` Jörn Engel
2003-09-16 14:52 ` Timothy Miller
2003-09-16 15:02 ` Wade
2003-09-16 15:04 ` Valdis.Kletnieks
2003-09-16 15:04 ` Nick Piggin
2003-09-16 8:45 ` Wade
2003-09-16 8:56 ` Jörn Engel
2003-09-16 12:10 ` Andries Brouwer
2003-09-16 9:07 ` Jörn Engel
2003-09-20 7:58 ` David S. Miller
2003-09-16 9:48 ` [PATCH] bttv-risc.c (was: Re: [CHECKER] 32 Memory Leaks on Error Paths) Wade
2003-09-16 10:18 ` [PATCH] fix memleak in emu10k1/midi.c " Wade
2003-09-16 12:03 ` [CHECKER] 32 Memory Leaks on Error Paths Andries Brouwer
2003-09-19 23:03 ` Chris Wright
2003-09-19 23:04 ` Chris Wright
2003-09-19 23:04 ` Chris Wright
2003-09-19 23:04 ` Chris Wright
2003-09-23 13:15 ` Stephen Smalley
2003-09-23 18:02 ` Chris Wright
2003-09-22 22:54 ` Chris Wright
2003-09-22 22:55 ` Chris Wright
2003-09-22 22:55 ` Chris Wright
2003-09-23 20:13 ` Chris Wright
2003-09-23 20:25 ` Greg KH
2003-09-23 21:38 ` Chris Wright
2003-09-23 22:14 ` Chris Wright
2003-09-24 0:17 ` Greg KH
2003-09-23 20:14 ` Chris Wright
2003-09-23 20:14 ` Chris Wright
2003-09-23 20:21 ` Jean Tourrilhes
2003-09-23 20:24 ` Chris Wright
2003-09-23 20:14 ` Chris Wright
2003-09-23 20:15 ` Chris Wright
2003-09-24 7:08 ` David Howells
[not found] <20030923140503.N20572@osdlab.pdx.osdl.net>
2003-09-24 4:13 ` Pete Zaitcev
2003-09-24 12:49 ` Alan Cox
2003-09-24 16:38 ` Pete Zaitcev
2003-09-29 17:48 ` Marcelo Tosatti
2003-09-29 17:54 ` Pete Zaitcev
2003-11-06 0:58 ` Pete Zaitcev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030916065553.GA12329@wohnheim.fh-wedel.de \
--to=joern@wohnheim.fh-wedel.de \
--cc=dwmw2@infradead.org \
--cc=dychen@stanford.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=mc@cs.stanford.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®