• Zhenzhong Duan's avatar
    PCI: Avoid duplicate IDs in driver dynamic IDs list · 3853f912
    Zhenzhong Duan authored
    When a device ID is written to /sys/bus/pci/drivers/.../new_id, we
    previously only checked the driver's static ID table for duplicates.
    Writing the same ID several times added it to the dynamic IDs list several
    times.
    
    This doesn't cause user-visible broken behavior, but remove_id_store() only
    removes one of the duplicate IDs, so if we add an ID several times, we
    would have to remove it the same number of times before it's completely
    gone.
    
    Fix it by calling pci_match_device(), which checks both dynamic and static
    IDs to avoid inserting duplicate IDs in dynamic IDs list.
    
    After fix, attempts to add an ID more than once cause an error:
    
      # echo "1af4 1041" > /sys/bus/pci/drivers/vfio-pci/new_id
      # echo "1af4 1041" > /sys/bus/pci/drivers/vfio-pci/new_id
      bash: echo: write error: File exists
    
    Link: https://lore.kernel.org/r/20201117054409.3428-3-zhenzhong.duan@gmail.comSigned-off-by: default avatarZhenzhong Duan <zhenzhong.duan@gmail.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    3853f912
pci-driver.c 41.7 KB