From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0ECEDC3601E for ; Thu, 10 Apr 2025 08:42:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 335B52800A9; Thu, 10 Apr 2025 04:42:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2BE8128009B; Thu, 10 Apr 2025 04:42:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1392D2800A9; Thu, 10 Apr 2025 04:42:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id E145128009B for ; Thu, 10 Apr 2025 04:42:46 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id D72EA1A0703 for ; Thu, 10 Apr 2025 08:42:47 +0000 (UTC) X-FDA: 83317493574.11.DAE3823 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf30.hostedemail.com (Postfix) with ESMTP id 2DB4480004 for ; Thu, 10 Apr 2025 08:42:45 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=FRyNJ6g0; spf=none (imf30.hostedemail.com: domain of BATV+8af77f6ab8959e5caacb+7900+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+8af77f6ab8959e5caacb+7900+infradead.org+hch@bombadil.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744274566; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=apfyLXFp4mpz8/dTquQGt331FyDN8GShWvECUqUQnXk=; b=ly/XAQ/qAPAxlCQKxqB4znGQ99v9VixywLHYp3O1+lpCCi6vDRyjQUpci0Rx5QqljKKWUK hoJDKeLTZHlLap0IPVGGHzWHJ6ar0adQRqQU6WpHS0c6iIgYItgdBZDwWMeGWYb+Adb27i +eaTx9L3ijqFmUECtnhG0/p9QL5JhhQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744274566; a=rsa-sha256; cv=none; b=T3pnZj5qcS9Vpzvj+zzXcqukTc7gayHkx4K9vEsEHLm7oAhgW6nIDuSHVzR71jQw62ruIj jyKpuz85pK/tGaYzMjILVRRGXS6g93e2PGlVPQmQt2zEOj6dwVpUKT0WLBcEAci+0gz+je RUvC2mRFKwZefnTCWVFNAIHbo7nk9dQ= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=FRyNJ6g0; spf=none (imf30.hostedemail.com: domain of BATV+8af77f6ab8959e5caacb+7900+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+8af77f6ab8959e5caacb+7900+infradead.org+hch@bombadil.srs.infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=In-Reply-To:Content-Type:MIME-Version :References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=apfyLXFp4mpz8/dTquQGt331FyDN8GShWvECUqUQnXk=; b=FRyNJ6g0TgK3lFVFJDAty4Vx+p 2GcIpX8aKtInetRLFajhT2MuxsfmdrzK67aUwOV9vSE+Yz4dBDmlhgRDLppTAuV8JQhVKje7BUCqA hGTO7t7XISNyoKPEPiH3DJ0WXN6VEgzN5oBFS6faIcwmNj/7yYXy1rRF43TD7n+jOb95oZWLtLBoS gDmgjhtKkfTxeiM9NUTtd6xrQyAMa1b67WdDTvbB8k3orQmxjG438aeY1h1A68CedZ64W1K+3q89j M4mSlBRNYhjTelrdyhg5ALuuo+uQ9Ltb0u32W92KPAFXuzTk21vifJIW0tTxmGRzDRM+KlajnjheL uZHFTJEw==; Received: from hch by bombadil.infradead.org with local (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2nUc-00000009n15-09rJ; Thu, 10 Apr 2025 08:42:38 +0000 Date: Thu, 10 Apr 2025 01:42:38 -0700 From: Christoph Hellwig To: Shivank Garg Cc: seanjc@google.com, david@redhat.com, vbabka@suse.cz, willy@infradead.org, akpm@linux-foundation.org, shuah@kernel.org, pbonzini@redhat.com, ackerleytng@google.com, paul@paul-moore.com, jmorris@namei.org, serge@hallyn.com, pvorel@suse.cz, bfoster@redhat.com, tabba@google.com, vannapurve@google.com, chao.gao@intel.com, bharata@amd.com, nikunj@amd.com, michael.day@amd.com, yan.y.zhao@intel.com, Neeraj.Upadhyay@amd.com, thomas.lendacky@amd.com, michael.roth@amd.com, aik@amd.com, jgg@nvidia.com, kalyazin@amazon.com, peterx@redhat.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-security-module@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-coco@lists.linux.dev Subject: Re: [PATCH RFC v7 5/8] KVM: guest_memfd: Make guest mem use guest mem inodes instead of anonymous inodes Message-ID: References: <20250408112402.181574-1-shivankg@amd.com> <20250408112402.181574-6-shivankg@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250408112402.181574-6-shivankg@amd.com> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-Stat-Signature: s9f7qua8f8hoc77j4faw43o3jro8njch X-Rspam-User: X-Rspamd-Queue-Id: 2DB4480004 X-Rspamd-Server: rspam08 X-HE-Tag: 1744274565-533307 X-HE-Meta: U2FsdGVkX19opvzTn4EHTUlb7SPi8KD1cwCoU4+shQnKayA8JMT24U3WBZwHxJls3FkqlGBmEvhuibDN/Ai7xaXbWYmxOyD4DjTg7tdtnd6rfNpuO1OFKdH4PTLc1Sejfp/FDZ5OB+VZ2jMctGIBvTMo3ar5882sNeG5uEpGJ4ZGIfQlop3z7OOmTLyxt27sdIxONxJksKWAxKXKYjd328UsryzH0HevvUTWq11zNgboKDjfZF1O4iS4RAvwnPV+6aVbaoJS6u4KXefqf71yZZzTR/nOeybraKxdpn3laKGp9uS4tKF0d1G2K9KpJX/X201kn33wo70nHzgDp1U74aNDDsBfE3V3ZXORSiNCeAyhRDaSJDfoUq8gWa9ZyTJ3SYZeAFR9kv2NcdYFbROOByhE0ZAAzyRbpFH3tmLpvnXzZHw2NCOlSfgtg9dnCfI2lV5eIrJ/p60IP04o6BPCI9T4u22phlUkCpr+fuoB8Lxp4CqGr4AUfplQdhZgbZlBN7WWGs8kyBagCQ7YRijUT1vStqYTNA4KdRLk95ZGNRbjJ6nkPW6NzOnuBkkMTagPUvYGnu/DKxoX3c/DR6QosJqtrfy78utdUJDLZtU4Ws6v3gxa6TGS78tiyWl+Vdoi6zt70n6mbkeGHAnxQ2Cl4XW1u4frJAv/imVDINxrfO1CSKsMWlzTdFMB/qAeulc8AJsJlNU36daWPiyzW+FgPPrJTllLHzlwYRIrrHZJCXxE+OWpLJY7udFFo6rajntK0JHRQ4L6R/L3U8UL1o14YBqO6FZJN1XKpEFwfdIBwGqADfuFt6/FFfNdxs7ObX04BI4hr4krMbyS2iSVOce+JHWCni5wtNVDAZVs6NCjCIfWXik0NesMo96875W7k8dDwA7gTXwTT+qGvQm34QOsORRkbaFUn4539LmkRfBS+EFfbJW4jfhE9bSsEVXKETY1M3rZpM2oBKJbPzYVEEH URNcxFov 6jTAnEan+ovYQAGoP/GGJuiSv2xDO6xSpJ+rZumOJEw/egfBKmfHl9drECYDaB/VW1xgr29gktWaNS09ZMwKnWzeoP7LqInGQS5WmoWDQKjL9+ZnhAXz1p67U1bH1hsQIGTOU8FnlB/z+vEIG0MLbZ+DNUE7Ujgv45Dh/DuwcsIKq8pvVV/RRtpNITNN+BvEDIHtyFXJASTM28HzDlm+U/o8sy5RtYyYmOgBeSRForuamQhS1dJTGmNq63CKC/qXpgvCaAyy/DUrMps42vaCkMg8W81su9Q2RpJuQ6PTHh4005KhZZdoIHOpvw3VLAP78acQCQpQaEgP2OTm1lLEBin7KM49B6moh46jYwXa2kFsnUTiiMrYkUb5KHg25PagD8B1K1xECV5vg3ByGWIFOfentW1k15T5RuDVsofvYRGM9qmix7+DX/cmoP9sCvmDnREnY+2I8GZidXKAzjWLK4rb7nkGiet5hTPjW8xRQR2RF0wd5+0B6gRkZBTCTiG4/05Jh6OPbkiBSbDZI3wCCf+9uKhzTN9EYJqRr0Mgbc2TbYwqaGitgboxrefjvR9xQooNP X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Apr 08, 2025 at 11:23:59AM +0000, Shivank Garg wrote: > From: Ackerley Tng > > Using guest mem inodes allows us to store metadata for the backing > memory on the inode. Metadata will be added in a later patch to support > HugeTLB pages. > > Metadata about backing memory should not be stored on the file, since > the file represents a guest_memfd's binding with a struct kvm, and > metadata about backing memory is not unique to a specific binding and > struct kvm. > > Signed-off-by: Ackerley Tng > Signed-off-by: Fuad Tabba > Signed-off-by: Shivank Garg > --- > include/uapi/linux/magic.h | 1 + > virt/kvm/guest_memfd.c | 133 +++++++++++++++++++++++++++++++------ > 2 files changed, 113 insertions(+), 21 deletions(-) > > diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h > index bb575f3ab45e..169dba2a6920 100644 > --- a/include/uapi/linux/magic.h > +++ b/include/uapi/linux/magic.h > @@ -103,5 +103,6 @@ > #define DEVMEM_MAGIC 0x454d444d /* "DMEM" */ > #define SECRETMEM_MAGIC 0x5345434d /* "SECM" */ > #define PID_FS_MAGIC 0x50494446 /* "PIDF" */ > +#define GUEST_MEMORY_MAGIC 0x474d454d /* "GMEM" */ > > #endif /* __LINUX_MAGIC_H__ */ > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > index 88453b040926..002328569c9e 100644 > --- a/virt/kvm/guest_memfd.c > +++ b/virt/kvm/guest_memfd.c > @@ -1,12 +1,17 @@ > // SPDX-License-Identifier: GPL-2.0 > +#include > +#include > #include > #include > #include > +#include > #include > #include > > #include "kvm_mm.h" > > +static struct vfsmount *kvm_gmem_mnt; > + > struct kvm_gmem { > struct kvm *kvm; > struct xarray bindings; > @@ -312,6 +317,38 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) > return gfn - slot->base_gfn + slot->gmem.pgoff; > } > > +static const struct super_operations kvm_gmem_super_operations = { > + .statfs = simple_statfs, > +}; > + > +static int kvm_gmem_init_fs_context(struct fs_context *fc) > +{ > + struct pseudo_fs_context *ctx; > + > + if (!init_pseudo(fc, GUEST_MEMORY_MAGIC)) > + return -ENOMEM; > + > + ctx = fc->fs_private; > + ctx->ops = &kvm_gmem_super_operations; > + > + return 0; > +} > + > +static struct file_system_type kvm_gmem_fs = { > + .name = "kvm_guest_memory", > + .init_fs_context = kvm_gmem_init_fs_context, > + .kill_sb = kill_anon_super, > +}; > + > +static void kvm_gmem_init_mount(void) > +{ > + kvm_gmem_mnt = kern_mount(&kvm_gmem_fs); > + BUG_ON(IS_ERR(kvm_gmem_mnt)); > + > + /* For giggles. Userspace can never map this anyways. */ > + kvm_gmem_mnt->mnt_flags |= MNT_NOEXEC; > +} > + > static struct file_operations kvm_gmem_fops = { > .open = generic_file_open, > .release = kvm_gmem_release, > @@ -321,11 +358,13 @@ static struct file_operations kvm_gmem_fops = { > void kvm_gmem_init(struct module *module) > { > kvm_gmem_fops.owner = module; > + > + kvm_gmem_init_mount(); > } > > void kvm_gmem_exit(void) > { > - > + kern_unmount(kvm_gmem_mnt); > } > > static int kvm_gmem_migrate_folio(struct address_space *mapping, > @@ -407,11 +446,79 @@ static const struct inode_operations kvm_gmem_iops = { > .setattr = kvm_gmem_setattr, > }; > > +static struct inode *kvm_gmem_inode_make_secure_inode(const char *name, > + loff_t size, u64 flags) > +{ > + const struct qstr qname = QSTR_INIT(name, strlen(name)); > + struct inode *inode; > + int err; > + > + inode = alloc_anon_inode(kvm_gmem_mnt->mnt_sb); > + if (IS_ERR(inode)) > + return inode; > + > + err = security_inode_init_security_anon(inode, &qname, NULL); > + if (err) { > + iput(inode); > + return ERR_PTR(err); > + } So why do other alloc_anon_inode callers not need security_inode_init_security_anon?