• Simone Gotti's avatar
    ACPI / PCI: Fix sysfs acpi_index and label errors · dcfa9be8
    Simone Gotti authored
    Fix errors in handling "device label" _DSM return values.
    
    If _DSM returns a Unicode string, the ACPI type is ACPI_TYPE_BUFFER, not
    ACPI_TYPE_STRING.  Fix dsm_label_utf16s_to_utf8s() to convert UTF-16 from
    acpi_object->buffer instead of acpi_object->string.
    
    Prior to v3.14, we accepted Unicode labels (ACPI_TYPE_BUFFER return
    values).  But after 1d0fcef7, we accepted only ASCII (ACPI_TYPE_STRING)
    (and we incorrectly tried to convert those ASCII labels from UTF-16 to
    UTF-8).
    
    Rejecting Unicode labels made us return -EPERM when reading sysfs
    "acpi_index" or "label" files, which in turn caused on-board network
    interfaces on a Dell PowerEdge E420 to be renamed (by udev net_id internal)
    from eno1/eno2 to enp2s0f0/enp2s0f1.
    
    Fix this by accepting either ACPI_TYPE_STRING (and treating it as ASCII) or
    ACPI_TYPE_BUFFER (and converting from UTF-16 to UTF-8).
    
    [bhelgaas: changelog]
    Fixes: 1d0fcef7 ("ACPI / PCI: replace open-coded _DSM code with helper functions")
    Signed-off-by: default avatarSimone Gotti <simone.gotti@gmail.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarJiang Liu <jiang.liu@linux.intel.com>
    CC: stable@vger.kernel.org	# v3.14+
    dcfa9be8
pci-label.c 7.38 KB