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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to