On Fri, Sep 2, 2022 at 7:23 PM Markus Armbruster <arm...@redhat.com> wrote: > > Akihiko Odaki <akihiko.od...@daynix.com> writes: > > > pci_add_capability appears most PCI devices. Its error handling required > > lots of code, and led to inconsistent behaviors such as: > > - passing error_abort > > - passing error_fatal > > - asserting the returned value > > - propagating the error to the caller > > - skipping the rest of the function > > - just ignoring > > > > The code generating errors in pci_add_capability had a comment which > > says: > >> Verify that capabilities don't overlap. Note: device assignment > >> depends on this check to verify that the device is not broken. > >> Should never trigger for emulated devices, but it's helpful for > >> debugging these. > > > > Indeed vfio has some code that passes capability offsets and sizes from > > a physical device, but it explicitly pays attention so that the > > capabilities never overlap. > > I can't see that at a glance. Can you give me a clue? > > > Therefore, we can always assert that > > capabilities never overlap when pci_add_capability is called, resolving > > these inconsistencies. > > > > Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> >
Looking at vfio_add_std_cap(), and vfio_add_ext_cap() it seems that they are clipping the size of capabilities so that they do not overlap, if I read it correctly. Regards, Akihiko Odaki