X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fpci%2Fsyscall.c;h=87fafc08cb9d6a3f31f861c29d260d842ae141d0;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=306cf23053bfc9f8f986b3a9808c2da5faf57382;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c index 306cf2305..87fafc08c 100644 --- a/drivers/pci/syscall.c +++ b/drivers/pci/syscall.c @@ -11,12 +11,14 @@ #include #include #include +#include #include - +#include "pci.h" asmlinkage long sys_pciconfig_read(unsigned long bus, unsigned long dfn, - unsigned long off, unsigned long len, void *buf) + unsigned long off, unsigned long len, + void __user *buf) { struct pci_dev *dev; u8 byte; @@ -36,13 +38,13 @@ sys_pciconfig_read(unsigned long bus, unsigned long dfn, lock_kernel(); switch (len) { case 1: - cfg_ret = pci_read_config_byte(dev, off, &byte); + cfg_ret = pci_user_read_config_byte(dev, off, &byte); break; case 2: - cfg_ret = pci_read_config_word(dev, off, &word); + cfg_ret = pci_user_read_config_word(dev, off, &word); break; case 4: - cfg_ret = pci_read_config_dword(dev, off, &dword); + cfg_ret = pci_user_read_config_dword(dev, off, &dword); break; default: err = -EINVAL; @@ -57,13 +59,13 @@ sys_pciconfig_read(unsigned long bus, unsigned long dfn, switch (len) { case 1: - err = put_user(byte, (unsigned char *)buf); + err = put_user(byte, (unsigned char __user *)buf); break; case 2: - err = put_user(word, (unsigned short *)buf); + err = put_user(word, (unsigned short __user *)buf); break; case 4: - err = put_user(dword, (unsigned int *)buf); + err = put_user(dword, (unsigned int __user *)buf); break; }; return err; @@ -74,13 +76,13 @@ error: they get instead of a machine check on x86. */ switch (len) { case 1: - put_user(-1, (unsigned char *)buf); + put_user(-1, (unsigned char __user *)buf); break; case 2: - put_user(-1, (unsigned short *)buf); + put_user(-1, (unsigned short __user *)buf); break; case 4: - put_user(-1, (unsigned int *)buf); + put_user(-1, (unsigned int __user *)buf); break; }; return err; @@ -88,7 +90,8 @@ error: asmlinkage long sys_pciconfig_write(unsigned long bus, unsigned long dfn, - unsigned long off, unsigned long len, void *buf) + unsigned long off, unsigned long len, + void __user *buf) { struct pci_dev *dev; u8 byte; @@ -106,28 +109,28 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn, lock_kernel(); switch(len) { case 1: - err = get_user(byte, (u8 *)buf); + err = get_user(byte, (u8 __user *)buf); if (err) break; - err = pci_write_config_byte(dev, off, byte); + err = pci_user_write_config_byte(dev, off, byte); if (err != PCIBIOS_SUCCESSFUL) err = -EIO; break; case 2: - err = get_user(word, (u16 *)buf); + err = get_user(word, (u16 __user *)buf); if (err) break; - err = pci_write_config_word(dev, off, word); + err = pci_user_write_config_word(dev, off, word); if (err != PCIBIOS_SUCCESSFUL) err = -EIO; break; case 4: - err = get_user(dword, (u32 *)buf); + err = get_user(dword, (u32 __user *)buf); if (err) break; - err = pci_write_config_dword(dev, off, dword); + err = pci_user_write_config_dword(dev, off, dword); if (err != PCIBIOS_SUCCESSFUL) err = -EIO; break;