Messages in this thread | | | Date | Thu, 11 Oct 2012 22:04:28 +0800 | From | Jeremy Kerr <> | Subject | Re: [PATCH 5/5] efivarfs: efivarfs_fill_super() ensure we clean up correctly on error |
| |
Hi Andy,
> @@ -969,16 +970,18 @@ > return -ENOMEM; > > list_for_each_entry_safe(entry, n, &efivars->list, list) { > - struct inode *inode; > struct dentry *dentry, *root = efivarfs_sb->s_root; > - char *name; > unsigned long size = 0; > int len, i; > > + inode = NULL; > + > len = utf16_strlen(entry->var.VariableName); > > /* GUID plus trailing NULL */ > name = kmalloc(len + 38, GFP_ATOMIC); > + if (!name) > + goto fail; > > for (i = 0; i < len; i++) > name[i] = entry->var.VariableName[i] & 0xFF; > @@ -991,7 +994,13 @@ > > inode = efivarfs_get_inode(efivarfs_sb, root->d_inode, > S_IFREG | 0644, 0); > + if (!inode) > + goto fail_name; > + > dentry = d_alloc_name(root, name); > + if (!dentry) > + goto fail_inode; > + > /* copied by the above to local storage in the dentry. */ > kfree(name);
If we break out of the loop on the second (and onwards) iteration, won't we still have the other inodes and dentries remaining allocated?
Cheers,
Jeremy
| |