aboutsummaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorSasha Levin <levinsasha928@gmail.com>2011-12-04 12:36:29 -0500
committerAvi Kivity <avi@redhat.com>2011-12-27 04:22:21 -0500
commitff5c2c0316ff0e3e2dba3ca14167d994453df093 (patch)
treea2cba54bb5486f508315842ac9ee026cd5d87981 /virt
parentcdfca7b346e6dbab1ba33260c28ccb8333485a5b (diff)
KVM: Use memdup_user instead of kmalloc/copy_from_user
Switch to using memdup_user when possible. This makes code more smaller and compact, and prevents errors. Signed-off-by: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/kvm_main.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index a6e612fced73..d8bac0751666 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1821,12 +1821,11 @@ out_free1:
1821 struct kvm_regs *kvm_regs; 1821 struct kvm_regs *kvm_regs;
1822 1822
1823 r = -ENOMEM; 1823 r = -ENOMEM;
1824 kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL); 1824 kvm_regs = memdup_user(argp, sizeof(*kvm_regs));
1825 if (!kvm_regs) 1825 if (IS_ERR(kvm_regs)) {
1826 r = PTR_ERR(kvm_regs);
1826 goto out; 1827 goto out;
1827 r = -EFAULT; 1828 }
1828 if (copy_from_user(kvm_regs, argp, sizeof(struct kvm_regs)))
1829 goto out_free2;
1830 r = kvm_arch_vcpu_ioctl_set_regs(vcpu, kvm_regs); 1829 r = kvm_arch_vcpu_ioctl_set_regs(vcpu, kvm_regs);
1831 if (r) 1830 if (r)
1832 goto out_free2; 1831 goto out_free2;
@@ -1850,13 +1849,11 @@ out_free2:
1850 break; 1849 break;
1851 } 1850 }
1852 case KVM_SET_SREGS: { 1851 case KVM_SET_SREGS: {
1853 kvm_sregs = kmalloc(sizeof(struct kvm_sregs), GFP_KERNEL); 1852 kvm_sregs = memdup_user(argp, sizeof(*kvm_sregs));
1854 r = -ENOMEM; 1853 if (IS_ERR(kvm_sregs)) {
1855 if (!kvm_sregs) 1854 r = PTR_ERR(kvm_sregs);
1856 goto out;
1857 r = -EFAULT;
1858 if (copy_from_user(kvm_sregs, argp, sizeof(struct kvm_sregs)))
1859 goto out; 1855 goto out;
1856 }
1860 r = kvm_arch_vcpu_ioctl_set_sregs(vcpu, kvm_sregs); 1857 r = kvm_arch_vcpu_ioctl_set_sregs(vcpu, kvm_sregs);
1861 if (r) 1858 if (r)
1862 goto out; 1859 goto out;
@@ -1952,13 +1949,11 @@ out_free2:
1952 break; 1949 break;
1953 } 1950 }
1954 case KVM_SET_FPU: { 1951 case KVM_SET_FPU: {
1955 fpu = kmalloc(sizeof(struct kvm_fpu), GFP_KERNEL); 1952 fpu = memdup_user(argp, sizeof(*fpu));
1956 r = -ENOMEM; 1953 if (IS_ERR(fpu)) {
1957 if (!fpu) 1954 r = PTR_ERR(fpu);
1958 goto out;
1959 r = -EFAULT;
1960 if (copy_from_user(fpu, argp, sizeof(struct kvm_fpu)))
1961 goto out; 1955 goto out;
1956 }
1962 r = kvm_arch_vcpu_ioctl_set_fpu(vcpu, fpu); 1957 r = kvm_arch_vcpu_ioctl_set_fpu(vcpu, fpu);
1963 if (r) 1958 if (r)
1964 goto out; 1959 goto out;