continue;
                if (len < 2 * sizeof(u32)) {
                        dev_err(dev, "nvmem: invalid reg on %pOF\n", child);
+                       of_node_put(child);
                        return -EINVAL;
                }
 
                cell = kzalloc(sizeof(*cell), GFP_KERNEL);
-               if (!cell)
+               if (!cell) {
+                       of_node_put(child);
                        return -ENOMEM;
+               }
 
                cell->nvmem = nvmem;
-               cell->np = of_node_get(child);
                cell->offset = be32_to_cpup(addr++);
                cell->bytes = be32_to_cpup(addr);
                cell->name = kasprintf(GFP_KERNEL, "%pOFn", child);
                                cell->name, nvmem->stride);
                        /* Cells already added will be freed later. */
                        kfree_const(cell->name);
-                       of_node_put(cell->np);
                        kfree(cell);
+                       of_node_put(child);
                        return -EINVAL;
                }
 
+               cell->np = of_node_get(child);
                nvmem_cell_add(cell);
        }