• Yi Yang's avatar
    ACPI: fix acpi fan state set error · 6594d87e
    Yi Yang authored
    Under /proc/acpi, there is a fan control interface, a user can
    set 0 or 3 to /proc/acpi/fan/*/state, 0 denotes D0 state, 3
    denotes D3 state, but in current implementation, a user can
    set a fan to D1 state by any char excluding '1', '2' and '3'.
    
    For example:
    
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost acpi]# echo "" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost acpi]# echo "3" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost acpi]# echo "xxxxx" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  on
    
    Obviously, such inputs as "" and "xxxxx" are invalid for fan state.
    
    This patch fixes this issue, it strictly limits fan state only to
    accept 0, 1, 2 and 3, any other inputs are invalid.
    
    Before applying this patch, the test result is:
    
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost acpi]# echo "" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost acpi]# echo "3" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost acpi]# echo "xxxxx" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost acpi]# echo "3" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost acpi]# echo "3x" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost acpi]# echo "-1x" > /proc/acpi/fan/C31B/state
    [root@localhost acpi]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost acpi]#
    
    After applying this patch, the test result is:
    
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost ~]# echo "" > /proc/acpi/fan/C31B/state
    -bash: echo: write error: Invalid argument
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost ~]# echo "3" > /proc/acpi/fan/C31B/state
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost ~]# echo "xxxxx" > /proc/acpi/fan/C31B/state
    -bash: echo: write error: Invalid argument
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost ~]# echo "-1x" > /proc/acpi/fan/C31B/state
    -bash: echo: write error: Invalid argument
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost ~]# echo "0" > //proc/acpi/fan/C31B/state
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost ~]# echo "4" > //proc/acpi/fan/C31B/state
    -bash: echo: write error: Invalid argument
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost ~]# echo "3" > //proc/acpi/fan/C31B/state
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  off
    [root@localhost ~]# echo "0" > //proc/acpi/fan/C31B/state
    [root@localhost ~]# cat /proc/acpi/fan/C31B/state
    status:                  on
    [root@localhost ~]# echo "3x" > //proc/acpi/fan/C31B/state
    -bash: echo: write error: Invalid argument
    [root@localhost ~]#
    Signed-off-by: default avatarYi Yang <yi.y.yang@intel.com>
    Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
    Acked-by: default avatarZhang Rui <rui.zhang@intel.com>
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    6594d87e
fan.c 9.02 KB