• T
    mem-hotplug: avoid illegal state prefixed with legal state when changing state of memory_block · 1f6a6cc8
    Tang Chen 提交于
    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.
    
      store_mem_state()
      {
           ......
       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,
    
    (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
    author.)
    
       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: NTang Chen <tangchen@cn.fujitsu.com>
    Reported-by: NHu 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: NToshi Kani <toshi.kani@hp.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    1f6a6cc8
memory.c 17.3 KB