lkml.org 
[lkml]   [2015]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v9 2/3] watchdog: add watchdog_cpumask sysctl to assist nohz

    Chris,

    I think it would also be nice to check the plausibility of the user input.

    +int proc_watchdog_cpumask(struct ctl_table *table, int write,
    + void __user *buffer, size_t *lenp, loff_t *ppos)
    +{
    + int err;
    +
    + mutex_lock(&watchdog_proc_mutex);
    + err = proc_do_large_bitmap(table, write, buffer, lenp, ppos);
    + if (!err && write) {
    + /* Remove impossible cpus to keep sysctl output cleaner. */
    + cpumask_and(watchdog_cpumask, watchdog_cpumask,
    + cpu_possible_mask);
    +
    + if (watchdog_enabled && watchdog_thresh)
    + smpboot_update_cpumask_percpu_thread(&watchdog_threads,
    + watchdog_cpumask);
    + }
    + mutex_unlock(&watchdog_proc_mutex);
    + return err;
    +}

    I think the user should only be allowed to specify a mask that is a subset of
    tick_nohz_full_mask as only those CPUs don't have a watchdog thread by default.
    In other words, the user should not be able to interfere with housekeeping CPUs.

    For example, add a plausibility check like so:

    save watchdog_cpumask because proc_do_large_bitmap() is going to change it

    proc_do_large_bitmap()

    // return an error if the user-specified mask includes a housekeeping CPU
    if (watchdog_cpumask and 'negated tick_nohz_full_mask') {
    restore saved watchdog_cpumask
    return -EINVAL
    }


    Regards,

    Uli


    \
     
     \ /
      Last update: 2015-04-21 16:41    [W:4.746 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site