aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/kvm/kvm_main.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index b10972ed0c9f..a55354009cbb 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -1778,6 +1778,7 @@ static long kvm_dev_ioctl(struct file *filp,
1778 unsigned int ioctl, unsigned long arg) 1778 unsigned int ioctl, unsigned long arg)
1779{ 1779{
1780 struct kvm *kvm = filp->private_data; 1780 struct kvm *kvm = filp->private_data;
1781 void __user *argp = (void __user *)arg;
1781 int r = -EINVAL; 1782 int r = -EINVAL;
1782 1783
1783 switch (ioctl) { 1784 switch (ioctl) {
@@ -1794,12 +1795,12 @@ static long kvm_dev_ioctl(struct file *filp,
1794 struct kvm_run kvm_run; 1795 struct kvm_run kvm_run;
1795 1796
1796 r = -EFAULT; 1797 r = -EFAULT;
1797 if (copy_from_user(&kvm_run, (void *)arg, sizeof kvm_run)) 1798 if (copy_from_user(&kvm_run, argp, sizeof kvm_run))
1798 goto out; 1799 goto out;
1799 r = kvm_dev_ioctl_run(kvm, &kvm_run); 1800 r = kvm_dev_ioctl_run(kvm, &kvm_run);
1800 if (r < 0 && r != -EINTR) 1801 if (r < 0 && r != -EINTR)
1801 goto out; 1802 goto out;
1802 if (copy_to_user((void *)arg, &kvm_run, sizeof kvm_run)) { 1803 if (copy_to_user(argp, &kvm_run, sizeof kvm_run)) {
1803 r = -EFAULT; 1804 r = -EFAULT;
1804 goto out; 1805 goto out;
1805 } 1806 }
@@ -1809,13 +1810,13 @@ static long kvm_dev_ioctl(struct file *filp,
1809 struct kvm_regs kvm_regs; 1810 struct kvm_regs kvm_regs;
1810 1811
1811 r = -EFAULT; 1812 r = -EFAULT;
1812 if (copy_from_user(&kvm_regs, (void *)arg, sizeof kvm_regs)) 1813 if (copy_from_user(&kvm_regs, argp, sizeof kvm_regs))
1813 goto out; 1814 goto out;
1814 r = kvm_dev_ioctl_get_regs(kvm, &kvm_regs); 1815 r = kvm_dev_ioctl_get_regs(kvm, &kvm_regs);
1815 if (r) 1816 if (r)
1816 goto out; 1817 goto out;
1817 r = -EFAULT; 1818 r = -EFAULT;
1818 if (copy_to_user((void *)arg, &kvm_regs, sizeof kvm_regs)) 1819 if (copy_to_user(argp, &kvm_regs, sizeof kvm_regs))
1819 goto out; 1820 goto out;
1820 r = 0; 1821 r = 0;
1821 break; 1822 break;
@@ -1824,7 +1825,7 @@ static long kvm_dev_ioctl(struct file *filp,
1824 struct kvm_regs kvm_regs; 1825 struct kvm_regs kvm_regs;
1825 1826
1826 r = -EFAULT; 1827 r = -EFAULT;
1827 if (copy_from_user(&kvm_regs, (void *)arg, sizeof kvm_regs)) 1828 if (copy_from_user(&kvm_regs, argp, sizeof kvm_regs))
1828 goto out; 1829 goto out;
1829 r = kvm_dev_ioctl_set_regs(kvm, &kvm_regs); 1830 r = kvm_dev_ioctl_set_regs(kvm, &kvm_regs);
1830 if (r) 1831 if (r)
@@ -1836,13 +1837,13 @@ static long kvm_dev_ioctl(struct file *filp,
1836 struct kvm_sregs kvm_sregs; 1837 struct kvm_sregs kvm_sregs;
1837 1838
1838 r = -EFAULT; 1839 r = -EFAULT;
1839 if (copy_from_user(&kvm_sregs, (void *)arg, sizeof kvm_sregs)) 1840 if (copy_from_user(&kvm_sregs, argp, sizeof kvm_sregs))
1840 goto out; 1841 goto out;
1841 r = kvm_dev_ioctl_get_sregs(kvm, &kvm_sregs); 1842 r = kvm_dev_ioctl_get_sregs(kvm, &kvm_sregs);
1842 if (r) 1843 if (r)
1843 goto out; 1844 goto out;
1844 r = -EFAULT; 1845 r = -EFAULT;
1845 if (copy_to_user((void *)arg, &kvm_sregs, sizeof kvm_sregs)) 1846 if (copy_to_user(argp, &kvm_sregs, sizeof kvm_sregs))
1846 goto out; 1847 goto out;
1847 r = 0; 1848 r = 0;
1848 break; 1849 break;
@@ -1851,7 +1852,7 @@ static long kvm_dev_ioctl(struct file *filp,
1851 struct kvm_sregs kvm_sregs; 1852 struct kvm_sregs kvm_sregs;
1852 1853
1853 r = -EFAULT; 1854 r = -EFAULT;
1854 if (copy_from_user(&kvm_sregs, (void *)arg, sizeof kvm_sregs)) 1855 if (copy_from_user(&kvm_sregs, argp, sizeof kvm_sregs))
1855 goto out; 1856 goto out;
1856 r = kvm_dev_ioctl_set_sregs(kvm, &kvm_sregs); 1857 r = kvm_dev_ioctl_set_sregs(kvm, &kvm_sregs);
1857 if (r) 1858 if (r)
@@ -1863,13 +1864,13 @@ static long kvm_dev_ioctl(struct file *filp,
1863 struct kvm_translation tr; 1864 struct kvm_translation tr;
1864 1865
1865 r = -EFAULT; 1866 r = -EFAULT;
1866 if (copy_from_user(&tr, (void *)arg, sizeof tr)) 1867 if (copy_from_user(&tr, argp, sizeof tr))
1867 goto out; 1868 goto out;
1868 r = kvm_dev_ioctl_translate(kvm, &tr); 1869 r = kvm_dev_ioctl_translate(kvm, &tr);
1869 if (r) 1870 if (r)
1870 goto out; 1871 goto out;
1871 r = -EFAULT; 1872 r = -EFAULT;
1872 if (copy_to_user((void *)arg, &tr, sizeof tr)) 1873 if (copy_to_user(argp, &tr, sizeof tr))
1873 goto out; 1874 goto out;
1874 r = 0; 1875 r = 0;
1875 break; 1876 break;
@@ -1878,7 +1879,7 @@ static long kvm_dev_ioctl(struct file *filp,
1878 struct kvm_interrupt irq; 1879 struct kvm_interrupt irq;
1879 1880
1880 r = -EFAULT; 1881 r = -EFAULT;
1881 if (copy_from_user(&irq, (void *)arg, sizeof irq)) 1882 if (copy_from_user(&irq, argp, sizeof irq))
1882 goto out; 1883 goto out;
1883 r = kvm_dev_ioctl_interrupt(kvm, &irq); 1884 r = kvm_dev_ioctl_interrupt(kvm, &irq);
1884 if (r) 1885 if (r)
@@ -1890,7 +1891,7 @@ static long kvm_dev_ioctl(struct file *filp,
1890 struct kvm_debug_guest dbg; 1891 struct kvm_debug_guest dbg;
1891 1892
1892 r = -EFAULT; 1893 r = -EFAULT;
1893 if (copy_from_user(&dbg, (void *)arg, sizeof dbg)) 1894 if (copy_from_user(&dbg, argp, sizeof dbg))
1894 goto out; 1895 goto out;
1895 r = kvm_dev_ioctl_debug_guest(kvm, &dbg); 1896 r = kvm_dev_ioctl_debug_guest(kvm, &dbg);
1896 if (r) 1897 if (r)
@@ -1902,7 +1903,7 @@ static long kvm_dev_ioctl(struct file *filp,
1902 struct kvm_memory_region kvm_mem; 1903 struct kvm_memory_region kvm_mem;
1903 1904
1904 r = -EFAULT; 1905 r = -EFAULT;
1905 if (copy_from_user(&kvm_mem, (void *)arg, sizeof kvm_mem)) 1906 if (copy_from_user(&kvm_mem, argp, sizeof kvm_mem))
1906 goto out; 1907 goto out;
1907 r = kvm_dev_ioctl_set_memory_region(kvm, &kvm_mem); 1908 r = kvm_dev_ioctl_set_memory_region(kvm, &kvm_mem);
1908 if (r) 1909 if (r)
@@ -1913,7 +1914,7 @@ static long kvm_dev_ioctl(struct file *filp,
1913 struct kvm_dirty_log log; 1914 struct kvm_dirty_log log;
1914 1915
1915 r = -EFAULT; 1916 r = -EFAULT;
1916 if (copy_from_user(&log, (void *)arg, sizeof log)) 1917 if (copy_from_user(&log, argp, sizeof log))
1917 goto out; 1918 goto out;
1918 r = kvm_dev_ioctl_get_dirty_log(kvm, &log); 1919 r = kvm_dev_ioctl_get_dirty_log(kvm, &log);
1919 if (r) 1920 if (r)
@@ -1921,13 +1922,13 @@ static long kvm_dev_ioctl(struct file *filp,
1921 break; 1922 break;
1922 } 1923 }
1923 case KVM_GET_MSRS: 1924 case KVM_GET_MSRS:
1924 r = msr_io(kvm, (void __user *)arg, get_msr, 1); 1925 r = msr_io(kvm, argp, get_msr, 1);
1925 break; 1926 break;
1926 case KVM_SET_MSRS: 1927 case KVM_SET_MSRS:
1927 r = msr_io(kvm, (void __user *)arg, do_set_msr, 0); 1928 r = msr_io(kvm, argp, do_set_msr, 0);
1928 break; 1929 break;
1929 case KVM_GET_MSR_INDEX_LIST: { 1930 case KVM_GET_MSR_INDEX_LIST: {
1930 struct kvm_msr_list __user *user_msr_list = (void __user *)arg; 1931 struct kvm_msr_list __user *user_msr_list = argp;
1931 struct kvm_msr_list msr_list; 1932 struct kvm_msr_list msr_list;
1932 unsigned n; 1933 unsigned n;
1933 1934