EDAC: Poll timeout cannot be zero, p2
Sanitize code even more to accept unsigned longs only and to not allow polling intervals below 1 second as this is unnecessary and doesn't make much sense anyway for polling errors. Signed-off-by: Borislav Petkov <bp@suse.de> Link: http://lkml.kernel.org/r/1391457913-881-1-git-send-email-prarit@redhat.com Cc: Doug Thompson <dougthompson@xmission.com> Cc: <stable@vger.kernel.org>
This commit is contained in:
parent
4675348e78
commit
9da21b1509
3 changed files with 9 additions and 7 deletions
|
@ -601,7 +601,7 @@ static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
|
|||
* user space has updated our poll period value, need to
|
||||
* reset our workq delays
|
||||
*/
|
||||
void edac_mc_reset_delay_period(int value)
|
||||
void edac_mc_reset_delay_period(unsigned long value)
|
||||
{
|
||||
struct mem_ctl_info *mci;
|
||||
struct list_head *item;
|
||||
|
@ -611,7 +611,7 @@ void edac_mc_reset_delay_period(int value)
|
|||
list_for_each(item, &mc_devices) {
|
||||
mci = list_entry(item, struct mem_ctl_info, link);
|
||||
|
||||
edac_mc_workq_setup(mci, (unsigned long) value);
|
||||
edac_mc_workq_setup(mci, value);
|
||||
}
|
||||
|
||||
mutex_unlock(&mem_ctls_mutex);
|
||||
|
|
|
@ -52,18 +52,20 @@ int edac_mc_get_poll_msec(void)
|
|||
|
||||
static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
|
||||
{
|
||||
long l;
|
||||
unsigned long l;
|
||||
int ret;
|
||||
|
||||
if (!val)
|
||||
return -EINVAL;
|
||||
|
||||
ret = kstrtol(val, 0, &l);
|
||||
ret = kstrtoul(val, 0, &l);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (!l || ((int)l != l))
|
||||
|
||||
if (l < 1000)
|
||||
return -EINVAL;
|
||||
*((int *)kp->arg) = l;
|
||||
|
||||
*((unsigned long *)kp->arg) = l;
|
||||
|
||||
/* notify edac_mc engine to reset the poll period */
|
||||
edac_mc_reset_delay_period(l);
|
||||
|
|
|
@ -52,7 +52,7 @@ extern void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
|
|||
extern void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev);
|
||||
extern void edac_device_reset_delay_period(struct edac_device_ctl_info
|
||||
*edac_dev, unsigned long value);
|
||||
extern void edac_mc_reset_delay_period(int value);
|
||||
extern void edac_mc_reset_delay_period(unsigned long value);
|
||||
|
||||
extern void *edac_align_ptr(void **p, unsigned size, int n_elems);
|
||||
|
||||
|
|
Loading…
Reference in a new issue