Commit 24a0b5e1 authored by Kees Cook's avatar Kees Cook
Browse files

pstore: inode: Use cleanup.h for struct pstore_private

Simplify error path when "private" needs to be freed.

Cc: Guilherme G. Piccoli <gpiccoli@igalia.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc:  <linux-hardening@vger.kernel.org>
Link: https://lore.kernel.org/r/20231205182622.1329923-4-keescook@chromium.org


Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent b775a054
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ static void free_pstore_private(struct pstore_private *private)
	}
	kfree(private);
}
DEFINE_FREE(pstore_private, struct pstore_private *, free_pstore_private(_T));

static void *pstore_ftrace_seq_start(struct seq_file *s, loff_t *pos)
{
@@ -340,9 +341,8 @@ int pstore_mkfile(struct dentry *root, struct pstore_record *record)
{
	struct dentry		*dentry;
	struct inode		*inode __free(pstore_iput) = NULL;
	int			rc = 0;
	char			name[PSTORE_NAMELEN];
	struct pstore_private	*private, *pos;
	struct pstore_private	*private __free(pstore_private) = NULL, *pos;
	size_t			size = record->size + record->ecc_notice_size;

	if (WARN_ON(!inode_is_locked(d_inode(root))))
@@ -358,7 +358,6 @@ int pstore_mkfile(struct dentry *root, struct pstore_record *record)
			return -EEXIST;
	}

	rc = -ENOMEM;
	inode = pstore_get_inode(root->d_sb);
	if (!inode)
		return -ENOMEM;
@@ -375,7 +374,7 @@ int pstore_mkfile(struct dentry *root, struct pstore_record *record)

	dentry = d_alloc_name(root, name);
	if (!dentry)
		goto fail_private;
		return -ENOMEM;

	private->dentry = dentry;
	private->record = record;
@@ -388,13 +387,9 @@ int pstore_mkfile(struct dentry *root, struct pstore_record *record)

	d_add(dentry, no_free_ptr(inode));

	list_add(&private->list, &records_list);
	list_add(&(no_free_ptr(private))->list, &records_list);

	return 0;

fail_private:
	free_pstore_private(private);
	return rc;
}

/*