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:
Borislav Petkov 2014-02-03 15:05:13 -05:00
parent 4675348e78
commit 9da21b1509
3 changed files with 9 additions and 7 deletions

View File

@ -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 * user space has updated our poll period value, need to
* reset our workq delays * 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 mem_ctl_info *mci;
struct list_head *item; struct list_head *item;
@ -611,7 +611,7 @@ void edac_mc_reset_delay_period(int value)
list_for_each(item, &mc_devices) { list_for_each(item, &mc_devices) {
mci = list_entry(item, struct mem_ctl_info, link); 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); mutex_unlock(&mem_ctls_mutex);

View File

@ -52,18 +52,20 @@ int edac_mc_get_poll_msec(void)
static int edac_set_poll_msec(const char *val, struct kernel_param *kp) static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
{ {
long l; unsigned long l;
int ret; int ret;
if (!val) if (!val)
return -EINVAL; return -EINVAL;
ret = kstrtol(val, 0, &l); ret = kstrtoul(val, 0, &l);
if (ret) if (ret)
return ret; return ret;
if (!l || ((int)l != l))
if (l < 1000)
return -EINVAL; return -EINVAL;
*((int *)kp->arg) = l;
*((unsigned long *)kp->arg) = l;
/* notify edac_mc engine to reset the poll period */ /* notify edac_mc engine to reset the poll period */
edac_mc_reset_delay_period(l); edac_mc_reset_delay_period(l);

View File

@ -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_workq_teardown(struct edac_device_ctl_info *edac_dev);
extern void edac_device_reset_delay_period(struct edac_device_ctl_info extern void edac_device_reset_delay_period(struct edac_device_ctl_info
*edac_dev, unsigned long value); *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); extern void *edac_align_ptr(void **p, unsigned size, int n_elems);