mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
cpufreq: Avoid potential buffer overrun and leak
If set_px_pminfo is called a second time with a larger state_count than the first call, calls to PMSTAT_get_pxstat will read beyond the end of the pt and trans_pt buffers allocated in cpufreq_statistic_init() since they would have been allocated with the original state_count. Secondly, the states array leaks on each subsequent call of set_px_pminfo. Fix both these issues by ignoring subsequent calls to set_px_pminfo if it completed successfully previously. Return success rather than an error to avoid errors in the dom0 kernel log when reloading the xen_acpi_processor module. At the same time, fix a leak of the states array on error. Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
eac626eb4c
commit
2f36bef3d8
1 file changed
+2
-1
@@ -517,7 +517,7 @@ int set_px_pminfo(uint32_t acpi_id, struct xen_processor_performance *perf)
|
||||
}
|
||||
}
|
||||
|
||||
if ( perf->flags & XEN_PX_PSS )
|
||||
if ( perf->flags & XEN_PX_PSS && !pxpt->states )
|
||||
{
|
||||
/* capability check */
|
||||
if ( perf->state_count <= 1 )
|
||||
@@ -534,6 +534,7 @@ int set_px_pminfo(uint32_t acpi_id, struct xen_processor_performance *perf)
|
||||
}
|
||||
if ( copy_from_guest(pxpt->states, perf->states, perf->state_count) )
|
||||
{
|
||||
XFREE(pxpt->states);
|
||||
ret = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
|
||||