diff options
author | Kees Cook <keescook@chromium.org> | 2017-02-10 10:15:34 -0800 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2017-02-13 10:25:52 -0800 |
commit | 46418413ed200aa2c856a4426f93a157672b10c7 (patch) | |
tree | cd788a6e3714f0f8c73f8b86724b39ae79d833e3 /fs/pstore | |
parent | 76d5692a58031696e282384cbd893832bc92bd76 (diff) | |
download | linux-46418413ed200aa2c856a4426f93a157672b10c7.tar.gz linux-46418413ed200aa2c856a4426f93a157672b10c7.tar.bz2 linux-46418413ed200aa2c856a4426f93a157672b10c7.zip |
pstore: Check for prz allocation in walker
Instead of needing additional checks in callers for unallocated przs,
perform the check in the walker, which gives us a more universal way to
handle the situation.
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'fs/pstore')
-rw-r--r-- | fs/pstore/ram.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c index 1d887efaaf71..11f918d34b1e 100644 --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -133,7 +133,8 @@ ramoops_get_next_prz(struct persistent_ram_zone *przs[], uint *c, uint max, struct persistent_ram_zone *prz; int i = (*c)++; - if (i >= max) + /* Give up if we never existed or have hit the end. */ + if (!przs || i >= max) return NULL; prz = przs[i]; @@ -280,7 +281,7 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type, 1, id, type, PSTORE_TYPE_PMSG, 0); /* ftrace is last since it may want to dynamically allocate memory. */ - if (!prz_ok(prz) && cxt->fprzs) { + if (!prz_ok(prz)) { if (!(cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU)) { prz = ramoops_get_next_prz(cxt->fprzs, &cxt->ftrace_read_cnt, 1, id, type, |