From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752023AbdAVSNk (ORCPT ); Sun, 22 Jan 2017 13:13:40 -0500 Received: from mout.web.de ([212.227.17.11]:50814 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751917AbdAVSM4 (ORCPT ); Sun, 22 Jan 2017 13:12:56 -0500 Subject: [PATCH 2/9] KVM: Move error code settings in kvm_vm_ioctl() To: kvm@vger.kernel.org, Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: Cc: LKML , kernel-janitors@vger.kernel.org From: SF Markus Elfring Message-ID: <18acab5d-a10d-77c0-8e8c-67bbaa1f0edb@users.sourceforge.net> Date: Sun, 22 Jan 2017 19:12:39 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:Z/zTQoaEG5zI1+GSbeuQ5ClEqYdKGnAngV3maKumcZRORbMPROx tFI/mvaZlpg286jYrljJthO/shJN2lhst8x6zK4UKEUlNXT11QymDZ9IRAlGJF8tpfOQJXB 1oZ8B4Dt15b9cQNtgSYeDK/w4BvaJupU7geaI2PZDGxN4y5ryq0TTFbbOVBBRy5LVBtlDEd hs/7jqFmTJvJEp/UnSG+g== X-UI-Out-Filterresults: notjunk:1;V01:K0:uNQVZTA67e0=:At0ZM8AQ+JyhEGYdtkhfn4 FlNK8Tw7eRZ+DQMvHDh0DBSe1PeasCG4zpqmxidX0yc110SZH4eIt1lLpDKwOMzL51n7Wfw7q 5ri4aVGqfBlmNIImNrsVg25aLGzRhJQ95zwJHKuxi68HvtwCVPCHi7DmB6Qjh3F0X9ICZ267S ePLaahR+WAGks61aYNAcIZ8jJ77zoBUoGksjfST5kWy2R8YQ7G76ySQTsvWEM89D4mXoNI2RP XfQa7nQDZcaUpK9rNW2hdHhEbKSUVqjnJM2MgLCHkLewaGdlEqrA5JP7EAFLGjGhX56w/FGBQ x0/Wc6N97k/MMghYM3c5n2Gn3aNnfFyFCjDAUdK3nhHpZDc1JSSByr+w0Ldame9GE56IjiX+E ItGfZ1BDHdeIptZqa+np5C3Cjz9ZYsgaCiXBMgyNY2TPmAcOSQh29GuDsfDvG0akcBRn7bZkE 28fb63u42H3ndoLfU9FPtEs7uG+/+KRaqE0bsj1b/Hyd4PYhOOjg9I3PZTCvCT20oOwa7zcKq 3OUC55DeunZKpaYkDzhTje/vZIdjCJhnrTJ9pTm6lrbeOISjdqHeSRPdfbSchzGsNNzROhRHB wDAJBI1FpjV8gXKcDK69o/hGOPBvAr7TuErYWzmrMTtFNVUP2vvOZP5ogGGDvRf0ctiJGKPWe pJo1o8iMk8EHZF4+0t6hX3sXJymgloD9CnmdbpWUqtrgQnQoqkY8nDAfVJDCp0X5saRHL6TM3 0jg85WeVG1zDgBkYbZ4gacJLhD76bsjGqG48p6MmfoAkRBlel4xY7U631EuGZI1NpCdcpFQ36 nn8cawg Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Sun, 22 Jan 2017 13:45:18 +0100 * A local variable was set to an error code before a concrete error situation was detected. Thus move the corresponding assignments into if branches to indicate a software failure there. This issue was detected by using the Coccinelle software. * Return directly after a call of the function "copy_from_user" (or two other checks) failed in a case block. * Delete the jump label "out" and two zero assignments which became unnecessary with this refactoring. Signed-off-by: Markus Elfring --- virt/kvm/kvm_main.c | 66 ++++++++++++++++++----------------------------------- 1 file changed, 22 insertions(+), 44 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index eeb340708d97..2773e5012948 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2960,20 +2960,17 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_SET_USER_MEMORY_REGION: { struct kvm_userspace_memory_region kvm_userspace_mem; - r = -EFAULT; if (copy_from_user(&kvm_userspace_mem, argp, sizeof(kvm_userspace_mem))) - goto out; - + return -EFAULT; r = kvm_vm_ioctl_set_memory_region(kvm, &kvm_userspace_mem); break; } case KVM_GET_DIRTY_LOG: { struct kvm_dirty_log log; - r = -EFAULT; if (copy_from_user(&log, argp, sizeof(log))) - goto out; + return -EFAULT; r = kvm_vm_ioctl_get_dirty_log(kvm, &log); break; } @@ -2981,18 +2978,16 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_REGISTER_COALESCED_MMIO: { struct kvm_coalesced_mmio_zone zone; - r = -EFAULT; if (copy_from_user(&zone, argp, sizeof(zone))) - goto out; + return -EFAULT; r = kvm_vm_ioctl_register_coalesced_mmio(kvm, &zone); break; } case KVM_UNREGISTER_COALESCED_MMIO: { struct kvm_coalesced_mmio_zone zone; - r = -EFAULT; if (copy_from_user(&zone, argp, sizeof(zone))) - goto out; + return -EFAULT; r = kvm_vm_ioctl_unregister_coalesced_mmio(kvm, &zone); break; } @@ -3000,18 +2995,16 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_IRQFD: { struct kvm_irqfd data; - r = -EFAULT; if (copy_from_user(&data, argp, sizeof(data))) - goto out; + return -EFAULT; r = kvm_irqfd(kvm, &data); break; } case KVM_IOEVENTFD: { struct kvm_ioeventfd data; - r = -EFAULT; if (copy_from_user(&data, argp, sizeof(data))) - goto out; + return -EFAULT; r = kvm_ioeventfd(kvm, &data); break; } @@ -3019,9 +3012,8 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_SIGNAL_MSI: { struct kvm_msi msi; - r = -EFAULT; if (copy_from_user(&msi, argp, sizeof(msi))) - goto out; + return -EFAULT; r = kvm_send_userspace_msi(kvm, &msi); break; } @@ -3031,22 +3023,17 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_IRQ_LINE: { struct kvm_irq_level irq_event; - r = -EFAULT; if (copy_from_user(&irq_event, argp, sizeof(irq_event))) - goto out; + return -EFAULT; r = kvm_vm_ioctl_irq_line(kvm, &irq_event, ioctl == KVM_IRQ_LINE_STATUS); if (r) - goto out; - - r = -EFAULT; - if (ioctl == KVM_IRQ_LINE_STATUS) { - if (copy_to_user(argp, &irq_event, sizeof(irq_event))) - goto out; - } + return r; - r = 0; + if (ioctl == KVM_IRQ_LINE_STATUS && + copy_to_user(argp, &irq_event, sizeof(irq_event))) + return -EFAULT; break; } #endif @@ -3056,24 +3043,20 @@ static long kvm_vm_ioctl(struct file *filp, struct kvm_irq_routing __user *urouting; struct kvm_irq_routing_entry *entries = NULL; - r = -EFAULT; if (copy_from_user(&routing, argp, sizeof(routing))) - goto out; - r = -EINVAL; - if (routing.nr > KVM_MAX_IRQ_ROUTES) - goto out; - if (routing.flags) - goto out; + return -EFAULT; + if (routing.nr > KVM_MAX_IRQ_ROUTES || routing.flags) + return -EINVAL; if (routing.nr) { - r = -ENOMEM; entries = vmalloc(routing.nr * sizeof(*entries)); if (!entries) - goto out; - r = -EFAULT; + return -ENOMEM; urouting = argp; if (copy_from_user(entries, urouting->entries, - routing.nr * sizeof(*entries))) + routing.nr * sizeof(*entries))) { + r = -EFAULT; goto out_free_irq_routing; + } } r = kvm_set_irq_routing(kvm, entries, routing.nr, routing.flags); @@ -3085,19 +3068,15 @@ static long kvm_vm_ioctl(struct file *filp, case KVM_CREATE_DEVICE: { struct kvm_create_device cd; - r = -EFAULT; if (copy_from_user(&cd, argp, sizeof(cd))) - goto out; + return -EFAULT; r = kvm_ioctl_create_device(kvm, &cd); if (r) - goto out; + return r; - r = -EFAULT; if (copy_to_user(argp, &cd, sizeof(cd))) - goto out; - - r = 0; + return -EFAULT; break; } case KVM_CHECK_EXTENSION: @@ -3106,7 +3085,6 @@ static long kvm_vm_ioctl(struct file *filp, default: r = kvm_arch_vm_ioctl(filp, ioctl, arg); } -out: return r; } -- 2.11.0