Message ID | 20230203094230.266952-3-thuth@redhat.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp742662wrn; Fri, 3 Feb 2023 01:57:49 -0800 (PST) X-Google-Smtp-Source: AK7set99BTAZ7sQJ8AEZlpFnG//C4pV7miupM60cwk/Y2gyAQ14Cax1Q8o/3WfUaqsJOtibW7uJo X-Received: by 2002:a17:906:184a:b0:878:74a9:1869 with SMTP id w10-20020a170906184a00b0087874a91869mr11199061eje.3.1675418269178; Fri, 03 Feb 2023 01:57:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675418269; cv=none; d=google.com; s=arc-20160816; b=JhC+wK6xXLvD7NOzUpd0eiYx+z4DovhjrqL7NX0NOHwhHpdwtQFpnzFqNMubm4YVLG Rr+Ymtp73jsSkP33xOjxJ97bzFKAD0Kzgg91zCS1k6s/+ZjDGqwZf55ju+W86m8t+elB aULR135I0R7rgknNbDjPTYct1oabgo8SOVCarSYY6iiFwC+Fs5k2TmiBgyocKTCts4/k crDdfVN0oej/D1QpFdeESpIHX2iJFMB9Ampggi56Np+goSTGQJgS1R8WzQFDHXKIQgmb vx8YGuF4LUsnR5LV8ZXnVLrwfEtuvhHmCMBB8rbQOucPBxyZMfzA3eD16CmtkgVYVqE4 LsiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=DqDRH/0lCXChL6lF9FhJdEI9fG4ptLvUYJEw5ZtLX0Q=; b=LTtssdBSDEz1DO6U4dpk04Na70DAG+wDgWTe3hz9ubOtJbxs5jigLS5rfACgj4gqhg /Qju7VnMOS/6/S72ZnJHIwrBhLoYDrTaFALWYgakxafikyIhJbohqxZ7j66bKp9ZorcD 1uKAQY9fNqSdHx3+CQNwqDOSmiOa/YwJJLR/kledyXnrKqm0ljavWJmHCkeiWQSdm2WP VmIgKY0UlZvrY4ImwR9yg0EJynU/PP1b0TLUuo/JFa5WjeL4RWTvHtUX2uq137FGfsw3 SI8sijG5htF3HOdAOGKCLXZfTcFUvYzdonKJilFjQjz6AVQ3K6amX4tQr57Fi7+qYnGn T3Fg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=HDBCNwbp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id fe16-20020a1709072a5000b00882042f9fb1si2673248ejc.724.2023.02.03.01.57.25; Fri, 03 Feb 2023 01:57:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=HDBCNwbp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232552AbjBCJnh (ORCPT <rfc822;il.mystafa@gmail.com> + 99 others); Fri, 3 Feb 2023 04:43:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231233AbjBCJnf (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 3 Feb 2023 04:43:35 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A478D25BA8 for <linux-kernel@vger.kernel.org>; Fri, 3 Feb 2023 01:42:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1675417369; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DqDRH/0lCXChL6lF9FhJdEI9fG4ptLvUYJEw5ZtLX0Q=; b=HDBCNwbptapTFtQU/27UDq2xSkAOtVAKsaNEgxmqhpuAVhrkrVkneC7XyMmg4XypuRNi/n XunmEwQ8PYzrJhN5PoJy5WPLCOvx+nfoTWW+zTsIlhJ8hXQWW6iJvATSW83wB2FW1xPrRu s8653pVPC26BNZNZ+2u2YDFfe76ssc0= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-286-55hyVc76NsCFjAV8PUgtUw-1; Fri, 03 Feb 2023 04:42:47 -0500 X-MC-Unique: 55hyVc76NsCFjAV8PUgtUw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7D6DB85CBED; Fri, 3 Feb 2023 09:42:46 +0000 (UTC) Received: from thuth.com (unknown [10.39.192.204]) by smtp.corp.redhat.com (Postfix) with ESMTP id B417340C1423; Fri, 3 Feb 2023 09:42:43 +0000 (UTC) From: Thomas Huth <thuth@redhat.com> To: kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>, Sean Christopherson <seanjc@google.com> Cc: kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, kvm-riscv@lists.infradead.org, Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>, Suzuki K Poulose <suzuki.poulose@arm.com>, Oliver Upton <oliver.upton@linux.dev>, Zenghui Yu <yuzenghui@huawei.com>, Christian Borntraeger <borntraeger@linux.ibm.com>, Janosch Frank <frankja@linux.ibm.com>, Claudio Imbrenda <imbrenda@linux.ibm.com>, David Hildenbrand <david@redhat.com>, linuxppc-dev@lists.ozlabs.org Subject: [PATCH 2/7] KVM: x86: Improve return type handling in kvm_vm_ioctl_get_nr_mmu_pages() Date: Fri, 3 Feb 2023 10:42:25 +0100 Message-Id: <20230203094230.266952-3-thuth@redhat.com> In-Reply-To: <20230203094230.266952-1-thuth@redhat.com> References: <20230203094230.266952-1-thuth@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756803386718875910?= X-GMAIL-MSGID: =?utf-8?q?1756803386718875910?= |
Series |
KVM: Standardize on "int" return types instead of "long"
|
|
Commit Message
Thomas Huth
Feb. 3, 2023, 9:42 a.m. UTC
kvm_vm_ioctl_get_nr_mmu_pages() tries to return a "unsigned long" value,
but its caller only stores ther return value in an "int" - which is also
what all the other kvm_vm_ioctl_*() functions are returning. So returning
values that do not fit into a 32-bit integer anymore does not work here.
It's better to adjust the return type, add a sanity check and return an
error instead if the value is too big.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
arch/x86/kvm/x86.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
Comments
On Fri, Feb 03, 2023, Thomas Huth wrote: > kvm_vm_ioctl_get_nr_mmu_pages() tries to return a "unsigned long" value, > but its caller only stores ther return value in an "int" - which is also > what all the other kvm_vm_ioctl_*() functions are returning. So returning > values that do not fit into a 32-bit integer anymore does not work here. > It's better to adjust the return type, add a sanity check and return an > error instead if the value is too big. > > Signed-off-by: Thomas Huth <thuth@redhat.com> > --- > arch/x86/kvm/x86.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index da4bbd043a7b..caa2541833dd 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -6007,8 +6007,11 @@ static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm, > return 0; > } > > -static unsigned long kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) > +static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) > { > + if (kvm->arch.n_max_mmu_pages > INT_MAX) > + return -EOVERFLOW; > + > return kvm->arch.n_max_mmu_pages; > } My vote is to skip this patch, skip deprecation, and go straight to deleting KVM_GET_NR_MMU_PAGES. The ioctl() has never worked[*], and none of the VMMs I checked use it (QEMU, Google's internal VMM, kvmtool, CrosVM). [*] https://lore.kernel.org/all/YpZu6%2Fk+8EydfBKf@google.com
On 03/02/2023 18.48, Sean Christopherson wrote: > On Fri, Feb 03, 2023, Thomas Huth wrote: >> kvm_vm_ioctl_get_nr_mmu_pages() tries to return a "unsigned long" value, >> but its caller only stores ther return value in an "int" - which is also >> what all the other kvm_vm_ioctl_*() functions are returning. So returning >> values that do not fit into a 32-bit integer anymore does not work here. >> It's better to adjust the return type, add a sanity check and return an >> error instead if the value is too big. >> >> Signed-off-by: Thomas Huth <thuth@redhat.com> >> --- >> arch/x86/kvm/x86.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c >> index da4bbd043a7b..caa2541833dd 100644 >> --- a/arch/x86/kvm/x86.c >> +++ b/arch/x86/kvm/x86.c >> @@ -6007,8 +6007,11 @@ static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm, >> return 0; >> } >> >> -static unsigned long kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) >> +static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) >> { >> + if (kvm->arch.n_max_mmu_pages > INT_MAX) >> + return -EOVERFLOW; >> + >> return kvm->arch.n_max_mmu_pages; >> } > > My vote is to skip this patch, skip deprecation, and go straight to deleting > KVM_GET_NR_MMU_PAGES. The ioctl() has never worked[*], and none of the VMMs I > checked use it (QEMU, Google's internal VMM, kvmtool, CrosVM). I guess I'm living too much in the QEMU world where things need to be deprecated first before removing them ;-) But sure, if everybody agrees that removing this directly is fine, too, I can do this in v2. Thomas PS: Has there ever been a discussion about the other deprecated interfaces in include/uapi/linux/kvm.h ? Most of the stuff there seems to be from 2009 ... so maybe it's time now to remove that, too?
On Tue, Feb 07, 2023, Thomas Huth wrote: > On 03/02/2023 18.48, Sean Christopherson wrote: > > On Fri, Feb 03, 2023, Thomas Huth wrote: > > > kvm_vm_ioctl_get_nr_mmu_pages() tries to return a "unsigned long" value, > > > but its caller only stores ther return value in an "int" - which is also > > > what all the other kvm_vm_ioctl_*() functions are returning. So returning > > > values that do not fit into a 32-bit integer anymore does not work here. > > > It's better to adjust the return type, add a sanity check and return an > > > error instead if the value is too big. > > > > > > Signed-off-by: Thomas Huth <thuth@redhat.com> > > > --- > > > arch/x86/kvm/x86.c | 5 ++++- > > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > > > index da4bbd043a7b..caa2541833dd 100644 > > > --- a/arch/x86/kvm/x86.c > > > +++ b/arch/x86/kvm/x86.c > > > @@ -6007,8 +6007,11 @@ static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm, > > > return 0; > > > } > > > -static unsigned long kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) > > > +static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) > > > { > > > + if (kvm->arch.n_max_mmu_pages > INT_MAX) > > > + return -EOVERFLOW; > > > + > > > return kvm->arch.n_max_mmu_pages; > > > } > > > > My vote is to skip this patch, skip deprecation, and go straight to deleting > > KVM_GET_NR_MMU_PAGES. The ioctl() has never worked[*], and none of the VMMs I > > checked use it (QEMU, Google's internal VMM, kvmtool, CrosVM). > > I guess I'm living too much in the QEMU world where things need to be > deprecated first before removing them ;-) If KVM_GET_NR_MMU_PAGES actually worked or had users then I'd feel differently. Anything we do to try and make this less awful is going to be an ABI change, so we might as well go for broke. > But sure, if everybody agrees that removing this directly is fine, too, I > can do this in v2. > > Thomas > > > PS: Has there ever been a discussion about the other deprecated interfaces > in include/uapi/linux/kvm.h ? Most of the stuff there seems to be from 2009 > ... so maybe it's time now to remove that, too? Not sure. They aren't actually "deprecated" for most projects' definition of "deprecated". AFAICT, "deprecated" here means "removed, but with a placeholder so that KVM doesn't reuse the old ioctl() number". It probably makes sense to do the same for KVM_GET_NR_MMU_PAGES. Yank out the backing code but leave the ioctl() definition so that if there are users, they get an explicit error code instead of random behavior, i.e. prevent KVM from reusing the number in the near future.
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index da4bbd043a7b..caa2541833dd 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6007,8 +6007,11 @@ static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm, return 0; } -static unsigned long kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) +static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm) { + if (kvm->arch.n_max_mmu_pages > INT_MAX) + return -EOVERFLOW; + return kvm->arch.n_max_mmu_pages; }