summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2007-12-26 21:50:59 +0000
committermarius <marius@FreeBSD.org>2007-12-26 21:50:59 +0000
commit8eb7673212b9e8790479d32d6f8f05c9aced0f8a (patch)
tree4edb6e7b76ad85fe9763bc61e682cf24ae1a5412 /sys/dev/pci
parentb82597528b504f508ca76c4ba6b5c6c9b00d5ab3 (diff)
downloadFreeBSD-src-8eb7673212b9e8790479d32d6f8f05c9aced0f8a.zip
FreeBSD-src-8eb7673212b9e8790479d32d6f8f05c9aced0f8a.tar.gz
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
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/pci_user.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/sys/dev/pci/pci_user.c b/sys/dev/pci/pci_user.c
index 80fea0e..0af05a9 100644
--- a/sys/dev/pci/pci_user.c
+++ b/sys/dev/pci/pci_user.c
@@ -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++;
}
}
OpenPOWER on IntegriCloud