aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCesar Eduardo Barros <cesarb@cesarb.net>2008-02-16 05:41:25 -0500
committerDave Jones <davej@redhat.com>2008-04-28 15:05:44 -0400
commit25aca347d49ffc38aa3b7e63ce9b90df7f8b79c8 (patch)
tree01ae9962d03db4ae07f808428600b5d3c725b607
parent74212ca432982903d0fc6a0f282b199e000ad8b1 (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>
-rw-r--r--drivers/cpufreq/cpufreq_stats.c6
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}
138CPUFREQ_STATDEVICE_ATTR(trans_table,0444,show_trans_table); 142CPUFREQ_STATDEVICE_ATTR(trans_table,0444,show_trans_table);