x86/resctrl: Avoid overflow in MB settings in bw_validate()
authorMartin Kletzander <nert.pinx@gmail.com>
Tue, 1 Oct 2024 11:43:56 +0000 (13:43 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 8 Oct 2024 14:17:38 +0000 (16:17 +0200)
commit2b5648416e47933939dc310c4ea1e29404f35630
tree57941633e81c158bbfd6af609f1cda8936576183
parentf8bc84b6096f1ffa67252f0f88d86e77f6bbe348
x86/resctrl: Avoid overflow in MB settings in bw_validate()

The resctrl schemata file supports specifying memory bandwidth associated with
the Memory Bandwidth Allocation (MBA) feature via a percentage (this is the
default) or bandwidth in MiBps (when resctrl is mounted with the "mba_MBps"
option).

The allowed range for the bandwidth percentage is from
/sys/fs/resctrl/info/MB/min_bandwidth to 100, using a granularity of
/sys/fs/resctrl/info/MB/bandwidth_gran. The supported range for the MiBps
bandwidth is 0 to U32_MAX.

There are two issues with parsing of MiBps memory bandwidth:

* The user provided MiBps is mistakenly rounded up to the granularity
  that is unique to percentage input.

* The user provided MiBps is parsed using unsigned long (thus accepting
  values up to ULONG_MAX), and then assigned to u32 that could result in
  overflow.

Do not round up the MiBps value and parse user provided bandwidth as the u32
it is intended to be. Use the appropriate kstrtou32() that can detect out of
range values.

Fixes: 8205a078ba78 ("x86/intel_rdt/mba_sc: Add schemata support")
Fixes: 6ce1560d35f6 ("x86/resctrl: Switch over to the resctrl mbps_val list")
Co-developed-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Martin Kletzander <nert.pinx@gmail.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
arch/x86/kernel/cpu/resctrl/ctrlmondata.c