| From | Bálint Czobor <> | Subject | [PATCH 44/70] cpufreq: interactive: fix crash on error paths in get_tokenized_data | Date | Tue, 27 Oct 2015 18:30:32 +0100 |
| |
From: Todd Poynor <toddpoynor@google.com>
Use separate variable for error code, free proper pointer.
Change-Id: Ia83cccb195997789ac6afbf5b8761f7b278196d6 Reported-by: Arve Hjønnevåg <arve@android.com> Signed-off-by: Todd Poynor <toddpoynor@google.com> Signed-off-by: Bálint Czobor <czoborbalint@gmail.com> --- drivers/cpufreq/cpufreq_interactive.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c index 7c734fa..3dc067e 100644 --- a/drivers/cpufreq/cpufreq_interactive.c +++ b/drivers/cpufreq/cpufreq_interactive.c @@ -647,29 +647,26 @@ static unsigned int *get_tokenized_data(const char *buf, int *num_tokens) int i; int ntokens = 1; unsigned int *tokenized_data; + int err = -EINVAL; cp = buf; while ((cp = strpbrk(cp + 1, " :"))) ntokens++; - if (!(ntokens & 0x1)) { - tokenized_data = ERR_PTR(-EINVAL); + if (!(ntokens & 0x1)) goto err; - } tokenized_data = kmalloc(ntokens * sizeof(unsigned int), GFP_KERNEL); if (!tokenized_data) { - tokenized_data = ERR_PTR(-ENOMEM); + err = -ENOMEM; goto err; } cp = buf; i = 0; while (i < ntokens) { - if (sscanf(cp, "%u", &tokenized_data[i++]) != 1) { - tokenized_data = ERR_PTR(-EINVAL); + if (sscanf(cp, "%u", &tokenized_data[i++]) != 1) goto err_kfree; - } cp = strpbrk(cp, " :"); if (!cp) @@ -677,10 +674,8 @@ static unsigned int *get_tokenized_data(const char *buf, int *num_tokens) cp++; } - if (i != ntokens) { - tokenized_data = ERR_PTR(-EINVAL); + if (i != ntokens) goto err_kfree; - } *num_tokens = ntokens; return tokenized_data; @@ -688,7 +683,7 @@ static unsigned int *get_tokenized_data(const char *buf, int *num_tokens) err_kfree: kfree(tokenized_data); err: - return tokenized_data; + return ERR_PTR(err); } static ssize_t show_target_loads( -- 1.7.9.5
|