diff options
author | Cesar Eduardo Barros <cesarb@cesarb.net> | 2008-02-16 05:41:25 -0500 |
---|---|---|
committer | Dave Jones <davej@redhat.com> | 2008-04-28 15:05:44 -0400 |
commit | 25aca347d49ffc38aa3b7e63ce9b90df7f8b79c8 (patch) | |
tree | 01ae9962d03db4ae07f808428600b5d3c725b607 /drivers/cpufreq/cpufreq_stats.c | |
parent | 74212ca432982903d0fc6a0f282b199e000ad8b1 (diff) |
[CPUFREQ] fix show_trans_table
Fix show_trans_table when it overflows PAGE_SIZE.
* Not all snprintf calls were protected against being passed a negative
length.
* When show_trans_table overflows, len might be > PAGE_SIZE. In that case,
returns PAGE_SIZE.
Signed-off-by: Cesar Eduardo Barros <cesarb@cesarb.net>
Signed-off-by: Dave Jones <davej@codemonkey.org.uk>
Diffstat (limited to 'drivers/cpufreq/cpufreq_stats.c')
-rw-r--r-- | drivers/cpufreq/cpufreq_stats.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c index 070421a5480e..ef09e069433b 100644 --- a/drivers/cpufreq/cpufreq_stats.c +++ b/drivers/cpufreq/cpufreq_stats.c | |||
@@ -114,7 +114,7 @@ show_trans_table(struct cpufreq_policy *policy, char *buf) | |||
114 | stat->freq_table[i]); | 114 | stat->freq_table[i]); |
115 | } | 115 | } |
116 | if (len >= PAGE_SIZE) | 116 | if (len >= PAGE_SIZE) |
117 | return len; | 117 | return PAGE_SIZE; |
118 | 118 | ||
119 | len += snprintf(buf + len, PAGE_SIZE - len, "\n"); | 119 | len += snprintf(buf + len, PAGE_SIZE - len, "\n"); |
120 | 120 | ||
@@ -131,8 +131,12 @@ show_trans_table(struct cpufreq_policy *policy, char *buf) | |||
131 | len += snprintf(buf + len, PAGE_SIZE - len, "%9u ", | 131 | len += snprintf(buf + len, PAGE_SIZE - len, "%9u ", |
132 | stat->trans_table[i*stat->max_state+j]); | 132 | stat->trans_table[i*stat->max_state+j]); |
133 | } | 133 | } |
134 | if (len >= PAGE_SIZE) | ||
135 | break; | ||
134 | len += snprintf(buf + len, PAGE_SIZE - len, "\n"); | 136 | len += snprintf(buf + len, PAGE_SIZE - len, "\n"); |
135 | } | 137 | } |
138 | if (len >= PAGE_SIZE) | ||
139 | return PAGE_SIZE; | ||
136 | return len; | 140 | return len; |
137 | } | 141 | } |
138 | CPUFREQ_STATDEVICE_ATTR(trans_table,0444,show_trans_table); | 142 | CPUFREQ_STATDEVICE_ATTR(trans_table,0444,show_trans_table); |