Skip to content

Commit

Permalink
EDAC: Poll timeout cannot be zero, p2
Browse files Browse the repository at this point in the history
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 <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Cc: Doug Thompson <[email protected]>
Cc: <[email protected]>
  • Loading branch information
suryasaimadhu committed Feb 14, 2014
1 parent 4675348 commit 9da21b1
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 7 deletions.
4 changes: 2 additions & 2 deletions drivers/edac/edac_mc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
10 changes: 6 additions & 4 deletions drivers/edac/edac_mc_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion drivers/edac/edac_module.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit 9da21b1

Please sign in to comment.