Skip to content
  • Bandan Das's avatar
    PCI: Fail new_id for vendor/device values already built into driver · 8895d3bc
    Bandan Das authored
    
    
    While using the sysfs new_id interface, the user can unintentionally feed
    incorrect values if the driver static table has a matching entry.  This is
    possible since only the device and vendor fields are mandatory and the rest
    are optional.  As a result, store_new_id() will fill in default values that
    are then passed on to the driver and can have unintended consequences.
    
    As an example, consider the ixgbe driver and the 82599EB network card:
    
      echo "8086 10fb" > /sys/bus/pci/drivers/ixgbe/new_id
    
    This will pass a pci_device_id with driver_data = 0 to ixgbe_probe(), which
    uses that zero to index a table of card operations.  The zeroth entry of
    the table does *not* correspond to the 82599 operations.
    
    This change returns an error if the user attempts to add a dynid for a
    vendor/device combination for which a static entry already exists.
    However, if the user intentionally wants a different set of values, she
    must provide all the 7 fields and that will be accepted.
    
    [bhelgaas: drop KVM text since the problem isn't KVM-specific]
    Signed-off-by: default avatarBandan Das <bsd@redhat.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    8895d3bc