• T
    EDAC: Fix sysfs dimm_label store operation · 438470b8
    Toshi Kani 提交于
    Sysfs "dimm_label" and "chX_dimm_label" nodes have the following issues
    in their store operation:
    
     1) A newline-terminated input string causes redundant newlines:
    
      # echo "test" > /sys/bus/mc0/devices/dimm0/dimm_label
      # cat  /sys/bus/mc0/devices/dimm0/dimm_label
      test
    
      #  od -bc /sys/bus/mc0/devices/dimm0/dimm_label
      0000000 164 145 163 164 012 012
                t   e   s   t  \n  \n
      0000006
    
     2) The original label string (31 characters) cannot be stored due to
        an improper size check:
    
      # echo "CPU_SrcID#0_Ha#0_Chan#0_DIMM#0" > /sys/bus/mc0/devices/dimm0/dimm_label
      # cat /sys/bus/mc0/devices/dimm0/dimm_label
    
      # od -bc /sys/bus/mc0/devices/dimm0/dimm_label
       0000000 012 012
                \n  \n
       0000002
    
     3) An input string longer than the buffer size results a wrong label
        info as it allows a retry with the remaining string:
    
      # echo "CPU_SrcID#0_Ha#0_Chan#0_DIMM#0_TEST" > /sys/bus/mc0/devices/dimm0/dimm_label
      # cat  /sys/bus/mc0/devices/dimm0/dimm_label
      _TEST
    
    Fix these issues by making the following changes:
     1) Replace a newline character at the end by setting a null. It also
        assures that the string is null-terminated in the label buffer.
     2) Check the label buffer size with 'sizeof(dimm->label)'.
     3) Fail a request if its string exceeds the label buffer size.
    Signed-off-by: NToshi Kani <toshi.kani@hpe.com>
    Acked-by: NTony Luck <tony.luck@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Cc: Robert Elliott <elliott@hpe.com>
    Link: http://lkml.kernel.org/r/1443121564.25474.160.camel@hpe.comSigned-off-by: NBorislav Petkov <bp@suse.de>
    438470b8
edac_mc_sysfs.c 26.4 KB