From patchwork Sun Jan 22 18:12:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SF Markus Elfring X-Patchwork-Id: 9531287 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 400036049F for ; Sun, 22 Jan 2017 18:14:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3278327FA6 for ; Sun, 22 Jan 2017 18:14:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 277A927FAC; Sun, 22 Jan 2017 18:14:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BE85927FA8 for ; Sun, 22 Jan 2017 18:14:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751941AbdAVSNB (ORCPT ); Sun, 22 Jan 2017 13:13:01 -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 Received: from [192.168.1.2] ([78.48.136.24]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0M2MUi-1cCSIn3nbY-00s5Ku; Sun, 22 Jan 2017 19:12:42 +0100 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: 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: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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; }