gatgetfs fill_super:
- double-free of inode on last two failure exits
- leak on the last failure exit
- touching addresses near 0 on last two failure exits
return -ENOMEM;
inode->i_op = &simple_dir_inode_operations;
if (!(d = d_alloc_root (inode))) {
-enomem:
iput (inode);
return -ENOMEM;
}
*/
dev = dev_new ();
if (!dev)
- goto enomem;
+ return -ENOMEM;
+
dev->sb = sb;
if (!(inode = gadgetfs_create_file (sb, CHIP,
dev, &dev_init_operations,
- &dev->dentry)))
- goto enomem;
+ &dev->dentry))) {
+ put_dev(dev);
+ return -ENOMEM;
+ }
/* other endpoint files are available after hardware setup,
* from binding to a controller.
gadgetfs_kill_sb (struct super_block *sb)
{
kill_litter_super (sb);
- put_dev (the_device);
- the_device = 0;
+ if (the_device) {
+ put_dev (the_device);
+ the_device = 0;
+ }
}
/*----------------------------------------------------------------------*/