pstore: Create common record initializer
authorKees Cook <keescook@chromium.org>
Fri, 19 May 2017 22:10:31 +0000 (15:10 -0700)
committerKees Cook <keescook@chromium.org>
Wed, 31 May 2017 17:13:44 +0000 (10:13 -0700)
In preparation for setting timestamps in the pstore core, create a common
initializer routine, instead of using static initializers.

Signed-off-by: Kees Cook <keescook@chromium.org>
fs/pstore/internal.h
fs/pstore/platform.c
fs/pstore/pmsg.c

index c416e653dc4f59d34a261ee2a617d82850067587..58051265626fefa9fb63e72ab238b16a9cf697d8 100644 (file)
@@ -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
index d8289ce00f9940d4b4dd6bfaf9068f7f7d268c78..7798041f3fba5a5efd5238faf5859fb17ec93311 100644 (file)
@@ -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);
 
index 209755e0d7c8ee92e3f19ff8fd4b45b6a9a9d1fa..24db02de1787453d4ad838443dd39e4a7e948484 100644 (file)
@@ -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;