Unmounting /sys fixes kudzu for me. My ethernet and firewire show up again correctly. Even lspci lists them correctly now.
This seems to be a problem with the code that accesses pci using sysfs. I checked the values there manually, and they are correct. I have only looked at the lspci code, and can not see it sharing common code with kudzu, unless code from one got copied to the other.
I'll have a look at kudzu later.
Is it possible, that whatever confuses lspci also affects kudzu?