Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e581ca81 authored by Kees Cook's avatar Kees Cook
Browse files

pstore: Create common record initializer



In preparation for setting timestamps in the pstore core, create a common
initializer routine, instead of using static initializers.

Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent efb74e4b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -30,5 +30,7 @@ extern void pstore_get_backend_records(struct pstore_info *psi,
extern int	pstore_mkfile(struct dentry *root,
			      struct pstore_record *record);
extern bool	pstore_is_mounted(void);
extern void	pstore_record_init(struct pstore_record *record,
				   struct pstore_info *psi);

#endif
+21 −14
Original line number Diff line number Diff line
@@ -474,6 +474,14 @@ static size_t copy_kmsg_to_buffer(int hsize, size_t len)
	return total_len;
}

void pstore_record_init(struct pstore_record *record,
			struct pstore_info *psinfo)
{
	memset(record, 0, sizeof(*record));

	record->psi = psinfo;
}

/*
 * callback from kmsg_dump. (s2,l2) has the most recently
 * written bytes, older bytes are in (s1,l1). Save as much
@@ -509,15 +517,14 @@ static void pstore_dump(struct kmsg_dumper *dumper,
		int header_size;
		int zipped_len = -1;
		size_t dump_size;
		struct pstore_record record = {
			.type = PSTORE_TYPE_DMESG,
			.count = oopscount,
			.reason = reason,
			.part = part,
			.compressed = false,
			.buf = psinfo->buf,
			.psi = psinfo,
		};
		struct pstore_record record;

		pstore_record_init(&record, psinfo);
		record.type = PSTORE_TYPE_DMESG;
		record.count = oopscount;
		record.reason = reason;
		record.part = part;
		record.buf = psinfo->buf;

		if (big_oops_buf && is_locked) {
			dst = big_oops_buf;
@@ -587,12 +594,12 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c)
	const char *e = s + c;

	while (s < e) {
		struct pstore_record record = {
			.type = PSTORE_TYPE_CONSOLE,
			.psi = psinfo,
		};
		struct pstore_record record;
		unsigned long flags;

		pstore_record_init(&record, psinfo);
		record.type = PSTORE_TYPE_CONSOLE;

		if (c > psinfo->bufsize)
			c = psinfo->bufsize;

@@ -845,7 +852,7 @@ void pstore_get_backend_records(struct pstore_info *psi,
			pr_err("out of memory creating record\n");
			break;
		}
		record->psi = psi;
		pstore_record_init(record, psi);

		record->size = psi->read(record);

+5 −5
Original line number Diff line number Diff line
@@ -22,16 +22,16 @@ static DEFINE_MUTEX(pmsg_lock);
static ssize_t write_pmsg(struct file *file, const char __user *buf,
			  size_t count, loff_t *ppos)
{
	struct pstore_record record = {
		.type = PSTORE_TYPE_PMSG,
		.size = count,
		.psi = psinfo,
	};
	struct pstore_record record;
	int ret;

	if (!count)
		return 0;

	pstore_record_init(&record, psinfo);
	record.type = PSTORE_TYPE_PMSG;
	record.size = count;

	/* check outside lock, page in any data. write_user also checks */
	if (!access_ok(VERIFY_READ, buf, count))
		return -EFAULT;