refscale: Bounds-check module parameters
The default value for refscale.nreaders is -1, which results in the code setting the value to three-quarters of the number of CPUs. On single-CPU systems, this results in three-quarters of the value one, which the C language's integer arithmetic rounds to zero. This in turn results in a divide-by-zero error. This commit therefore adds bounds checking to the refscale module parameters, so that if they are less than one, they are set to the value one. Reported-by: kernel test robot <lkp@intel.com> Tested-by "Chen, Rong A" <rong.a.chen@intel.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
3650b228f8
commit
0c6d18d84d
@ -681,6 +681,12 @@ ref_scale_init(void)
|
|||||||
// Reader tasks (default to ~75% of online CPUs).
|
// Reader tasks (default to ~75% of online CPUs).
|
||||||
if (nreaders < 0)
|
if (nreaders < 0)
|
||||||
nreaders = (num_online_cpus() >> 1) + (num_online_cpus() >> 2);
|
nreaders = (num_online_cpus() >> 1) + (num_online_cpus() >> 2);
|
||||||
|
if (WARN_ONCE(loops <= 0, "%s: loops = %ld, adjusted to 1\n", __func__, loops))
|
||||||
|
loops = 1;
|
||||||
|
if (WARN_ONCE(nreaders <= 0, "%s: nreaders = %d, adjusted to 1\n", __func__, nreaders))
|
||||||
|
nreaders = 1;
|
||||||
|
if (WARN_ONCE(nruns <= 0, "%s: nruns = %d, adjusted to 1\n", __func__, nruns))
|
||||||
|
nruns = 1;
|
||||||
reader_tasks = kcalloc(nreaders, sizeof(reader_tasks[0]),
|
reader_tasks = kcalloc(nreaders, sizeof(reader_tasks[0]),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!reader_tasks) {
|
if (!reader_tasks) {
|
||||||
|
Loading…
Reference in New Issue
Block a user