• Tang Chen's avatar
    mem-hotplug: avoid illegal state prefixed with legal state when changing state of memory_block · 1f6a6cc8
    Tang Chen authored
    We use the following command to online a memory_block:
        echo online|online_kernel|online_movable > /sys/devices/system/memory/memoryXXX/state
    But, if we do the following:
        echo online_fhsjkghfkd > /sys/devices/system/memory/memoryXXX/state
    the block will also be onlined.
    This is because the following code in store_mem_state() does not compare
    the whole string, but only the prefix of the string.
       328         if (!strncmp(buf, "online_kernel", min_t(int, count, 13)))
    Here, only compare the first 13 letters of the string. If we give "online_kernelXXXXXX",
    it will be recognized as online_kernel, which is incorrect.
       329                 online_type = ONLINE_KERNEL;
       330         else if (!strncmp(buf, "online_movable", min_t(int, count, 14)))
    We have the same problem here,
       331                 online_type = ONLINE_MOVABLE;
       332         else if (!strncmp(buf, "online", min_t(int, count, 6)))
    (Here is more problematic.  If we give online_movalbe, which is a typo
    of online_movable, it will be recognized as online without noticing the
       333                 online_type = ONLINE_KEEP;
       334         else if (!strncmp(buf, "offline", min_t(int, count, 7)))
    and here.
       335                 online_type = -1;
       336         else {
       337                 ret = -EINVAL;
       338                 goto err;
       339         }
    This patch fixes this problem by using sysfs_streq() to compare the
    whole string.
    Signed-off-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Reported-by: default avatarHu Tao <hutao@cn.fujitsu.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: Gu Zheng <guz.fnst@cn.fujitsu.com>
    Acked-by: default avatarToshi Kani <toshi.kani@hp.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
memory.c 17.3 KB