Fix some bugs in the FreeBSD 4/5/6 pci(4) IOCTLs compatibility code:
- Use the correct offsets when copying out the results of PCIOCGETCONF_OLD. This happened to not affect the 64-bit architectures because there the addition of pc_domain to struct pcisel didn't change the overall size of struct pci_conf. [1] - Always copy the name and unit information to conf_old so it's also part of the output once this information is cached in dinfo. - Use the correct type for flags in struct pci_match_conf_old. This change is more or less cosmetic though. Reported and tested by: bde [1] Reviewed by: imp MFC after: 3 days Committed from: 24C3
This commit is contained in:
parent
b82597528b
commit
8eb7673212
@ -215,7 +215,7 @@ struct pci_match_conf_old {
|
||||
u_int16_t pc_vendor; /* PCI Vendor ID */
|
||||
u_int16_t pc_device; /* PCI Device ID */
|
||||
u_int8_t pc_class; /* PCI class */
|
||||
pci_getconf_flags flags; /* Matching expression */
|
||||
pci_getconf_flags_old flags; /* Matching expression */
|
||||
};
|
||||
|
||||
struct pci_io_old {
|
||||
@ -527,23 +527,20 @@ pci_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *t
|
||||
dinfo->conf.pc_progif;
|
||||
conf_old.pc_revid =
|
||||
dinfo->conf.pc_revid;
|
||||
conf_old.pd_name[0] = '\0';
|
||||
conf_old.pd_unit = 0;
|
||||
if (name) {
|
||||
strncpy(conf_old.pd_name, name,
|
||||
sizeof(conf_old.pd_name));
|
||||
conf_old.
|
||||
pd_name[PCI_MAXNAMELEN] = 0;
|
||||
conf_old.pd_unit =
|
||||
dinfo->conf.pd_unit;
|
||||
}
|
||||
strncpy(conf_old.pd_name,
|
||||
dinfo->conf.pd_name,
|
||||
sizeof(conf_old.pd_name));
|
||||
conf_old.pd_name[PCI_MAXNAMELEN] = 0;
|
||||
conf_old.pd_unit =
|
||||
dinfo->conf.pd_unit;
|
||||
confdata = &conf_old;
|
||||
} else
|
||||
#endif
|
||||
confdata = &dinfo->conf;
|
||||
/* Only if we can copy it out do we count it. */
|
||||
if (!(error = copyout(confdata,
|
||||
&cio->matches[cio->num_matches], confsz)))
|
||||
(caddr_t)cio->matches +
|
||||
confsz * cio->num_matches, confsz)))
|
||||
cio->num_matches++;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user