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 5F9C1C02182 for ; Thu, 23 Jan 2025 09:51:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E8A456B0082; Thu, 23 Jan 2025 04:51:22 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E3AB76B0088; Thu, 23 Jan 2025 04:51:22 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D0179280001; Thu, 23 Jan 2025 04:51:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id AB0B86B0082 for ; Thu, 23 Jan 2025 04:51:22 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 5650B120D94 for ; Thu, 23 Jan 2025 09:51:22 +0000 (UTC) X-FDA: 83038248804.03.0256242 Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by imf28.hostedemail.com (Postfix) with ESMTP id 7E3CFC000C for ; Thu, 23 Jan 2025 09:51:20 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tvvaavJe; spf=pass (imf28.hostedemail.com: domain of tabba@google.com designates 209.85.160.174 as permitted sender) smtp.mailfrom=tabba@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1737625880; 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=yviuU7vMVVFib1+GlJJHR7UtIpXdMrw1DtytEsRq4SU=; b=chN8wkrV5iEzr5tjW/ciE7gUUYMpCN2oyntwySMsmp9XoGmXv4quzT+n9RoyQVjWNJq82v boIPmUjZdXNw+1j6ayu0En2lyYxnN6W4i9pWHKmY4zfbCkluP/w5zFvtlOBwNCS/ZR7F3u U/Um/dTW8cVNHwdu5tgpFHJpd10MorQ= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tvvaavJe; spf=pass (imf28.hostedemail.com: domain of tabba@google.com designates 209.85.160.174 as permitted sender) smtp.mailfrom=tabba@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1737625880; a=rsa-sha256; cv=none; b=FKVIYxBZuGBHpu1CTjX4SppQdf/NQA9v4xEHMF0AOCx7x8BZ/Dxzk80X4AcokAQtFXDMf3 usuKnE+4EVNBN8Zd/suaV1+vhcEfv9wr7oz0+BH2WvaAWfiIvRJ2M2NZLf/hFuxIdTfTrr nq6JgLCYB4rtP+/xp6HaJU1g0hszX6g= Received: by mail-qt1-f174.google.com with SMTP id d75a77b69052e-467896541e1so209761cf.0 for ; Thu, 23 Jan 2025 01:51:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1737625879; x=1738230679; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=yviuU7vMVVFib1+GlJJHR7UtIpXdMrw1DtytEsRq4SU=; b=tvvaavJeC1c/ng76MxkCJR652SmvVlqBvF74w58ebEO7/8s+WZ7puF/YZVe2n8eWCj EUve8ERlc3uXyvwpGjZ1Js3DA8RelNUb3QoJmoP1pk0xtRssYlRv51sFkML9xQTIlvHa sFHUAYhZ8uBuKylR2rqkJY/NHPoHsU69yJnbRzpzQcARc59F6q9vnLuZ7Ay8YGuES1r7 8IF4HO26PnCDZ6gtjp2NF+0YFGnmNkYykxFe6PidcuNUZ32yWSialfGpafbuMbI9W7DO bwAl+xbCunHOVkLaspew+zZDeFqxOJGuhMoFNChNIOhPSaAytX0Xmy2tc+tHvR1AmLKn 2x5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737625879; x=1738230679; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=yviuU7vMVVFib1+GlJJHR7UtIpXdMrw1DtytEsRq4SU=; b=vdygeD+hXtpQ9wmMJZYO6UMXSj+rfWuewptqQfkK0SrRzrMfoQQb2BoRUwLzmxNGkp rApVjDOGKm+GJBRMYkUU/g4mCp9mKrXlKiXrBv7HnQx0MX/Aa7rMQBw+eM9TBCuInAyP 66JNT9US4PmuaWzJ9wPVpdF+u2FtmGPs6KlJyhSw0t5/B/jzpt/D+dE9EC8lrYLzqQsR kbQAFymag492YcHl3Krvk89THUbe9Ga7GatDkupxYcktAPtoxoqzr+Y7EK0qGEeevaoS j99dUx8vHd+t6XXl0duK6pfCQJThYGtHotGxZkbISvXTqx+cNGyNyWwrYKwFWxUikw5P ghhg== X-Forwarded-Encrypted: i=1; AJvYcCVXIjSr8wcLWL2atN1eOYhI4cyLQb7/8mRoMSOAaOkcjXxe6whjKHkiOVaOJQVsZSwJhDt1gMWqZw==@kvack.org X-Gm-Message-State: AOJu0YxijYnY3vMEgDRiLsxuSdNbBWr+4nyjhSScaGBWlAT0uthnEqLW Z6P4fxNAXDLeT30zMqeRdMgGhyFljhuNEqCRbsu7sL+RODsCpkRQzrbc92Kj/g2cYssd4Ha0xnt gGbCAieA/w1I375NX4CJwTr5COd6MQ+AmSpD+ X-Gm-Gg: ASbGncuPiDw2xWS4rCdMAkUdO3x4nDu8mqLha+na/MlVMYPc7isvsiLRmZJZrgnfXgq 68t9RHENi2PcibbK4JIMfHfFYDT8akQbU0kLK8rf9iBjmCBXvUMMR4zCPUL47Dqjr3NMbZ/4c5y Gm27UA2kfpLhjr7A== X-Google-Smtp-Source: AGHT+IGGx6fhGAGnD3JpCHn1/8lIrUk1LZpCG+05sYeACx+iitK5ZlJ3LsWzOvvIi0xtTpfhCDHLRJeFYIUXCTXHqJY= X-Received: by 2002:ac8:5887:0:b0:46c:7d66:557f with SMTP id d75a77b69052e-46e5c0f91b5mr3437421cf.8.1737625879389; Thu, 23 Jan 2025 01:51:19 -0800 (PST) MIME-Version: 1.0 References: <20250117163001.2326672-7-tabba@google.com> In-Reply-To: From: Fuad Tabba Date: Thu, 23 Jan 2025 09:50:43 +0000 X-Gm-Features: AWEUYZnBbulFTZGR1qtloKSczYkeBb6FihtEZxc8a8TdA87tJk3UxG7x1ydvWtE Message-ID: Subject: Re: [RFC PATCH v5 06/15] KVM: guest_memfd: Handle final folio_put() of guestmem pages To: Ackerley Tng Cc: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, yu.c.zhang@linux.intel.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 7E3CFC000C X-Stat-Signature: 9atta7b4r13s9dwqrin6dgwbbb5cfjoy X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1737625880-776900 X-HE-Meta: U2FsdGVkX18A/q0iPN4hqRt2sSsd6WafjZnAN5Afm7EKpdI31QkwRWAre7X9sBhamE+7sCHiOIux6TMc25k66+ANNn0aSZ9bS7ZQnOBCgceUiShvXRGPGBfOnPNaEI8pcLJttYgZDpnL4AETeJ9MlOXvOJvJQHfgYiZgiwTAyL1BxwUaM+67QaRB4NNlvRfRf/tecRoAvX8eUW2iAWMBMwOUDQnBu4ABpOGHsROhnnA/C2rc/s6nBbvamSgZPuL/fgvUXP73rF8wwZwWSgaK8STSq0XmGWo380gFnO1Nu1i1XZNNRMHIHuiPoMEv7TBA9IKtgNbxvVJJ1WTWh/ey/8PqzJzFHa51Kr8328wnI29m2H4vkS8xPpBmq5ZEXCQONo6jwKC1vlKVTcpjzW2P3VIrg4RpFIS88XDNIRr4OHtoBOK1goc2UCnEzwk5+2CWvwCOIoIeqR3zqXRfdOF+jwM8PNWpkMjYGvFz3TPcDjr8h6LXUOjG50reFiHqaM7onjGI1nl0CiWBqujEkpzwZFyUyWDRPhz6fbVaRDAjE0W01X2oILVfafB/JNSUQ5YNPJ4UG2FO77BHxfkpEG+DC7J6Bg9K9Lbzh4iIGcKUGmIb7SlSALCEDgVg+jUfH8dLjo5Yz/RQ/8J2gzhg0Yw2ZYARfic7RySTcH2e7Fe6xVlCukFA9cgxx2Um+tICvx37BmSbdqcyUApFhAQav1FptEAjmu8+sgPPMCESzFZzDSGBxJ7WZQeaPa7DbRkKpnawB/4bscqZ4CDIw2RYDKWkhLi/gO2sfDMbpXKQc1tAi8nZJMjnCu5Ipzesd++YTXJM27MPMeBfdhpq0d/auSElXwtTR1rUG2UZAQaoQ5AifRl0Usyir4SgWml28i6HaPt2+GQftJMo2T4c2/JQiHgpQ0LWLCgb3YW+i2GNls3vA24ghawKFo9a1rXCyhges04w613h8JyxidBYJzrkU5Z K5MhE47o qj2t/fS634fG3RFmX0KIk6JCd+wBdC/4Jcvi2ziAY2WpvkqFHoe+r5gewnCFdWCfg0CxKqn6MUAV5ea6z5415ktx4E5q+npcULfx0eNw6VbT0SsM0yfD/C5ZSHI54S4tEJBwdCNyhVjqkvDp9Nse2uXY+sHNE1unbRi+WueJRYzLKHVSRojfsrm+HulULpABRRHkDr588lNmv7SAO0/D8tpK/amBlZo9w4FiWpLxyAXVul+ZQVS9lCgK/B6fBZVdyKKnJ3sFKMEUlmcxQS92p8FQoNPv6CUBiizb5nHvNnpC3E2Ke7qmPC3P2bpABwKBA3cD6t+OYTiKxo+ahpUFwFlrcTw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.010684, 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 Wed, 22 Jan 2025 at 22:16, Ackerley Tng wrote: > > Fuad Tabba writes: > > Hey Fuad, I'm still working on verifying all this but for now this is > one issue. I think this can be fixed by checking if the folio->mapping > is NULL. If it's NULL, then the folio has been disassociated from the > inode, and during the dissociation (removal from filemap), the > mappability can also either > > 1. Be unset so that the default mappability can be set up based on > GUEST_MEMFD_FLAG_INIT_MAPPABLE, or > 2. Be directly restored based on GUEST_MEMFD_FLAG_INIT_MAPPABLE Thanks for pointing this out. I hadn't considered this case. I'll fix in the respin. > > > > > > + > > +/* > > + * Callback function for __folio_put(), i.e., called when all references by the > > + * host to the folio have been dropped. This allows gmem to transition the state > > + * of the folio to mappable by the guest, and allows the hypervisor to continue > > + * transitioning its state to private, since the host cannot attempt to access > > + * it anymore. > > + */ > > +void kvm_gmem_handle_folio_put(struct folio *folio) > > +{ > > + struct xarray *mappable_offsets; > > + struct inode *inode; > > + pgoff_t index; > > + void *xval; > > + > > + inode = folio->mapping->host; > > IIUC this will be a NULL pointer dereference if the folio had been > removed from the filemap, either through truncation or if the > guest_memfd file got closed. Ack. > > + index = folio->index; > > And if removed from the filemap folio->index is probably invalid. Ack and thanks again, /fuad > > + mappable_offsets = &kvm_gmem_private(inode)->mappable_offsets; > > + xval = xa_mk_value(KVM_GMEM_GUEST_MAPPABLE); > > + > > + filemap_invalidate_lock(inode->i_mapping); > > + __kvm_gmem_restore_pending_folio(folio); > > + WARN_ON_ONCE(xa_err(xa_store(mappable_offsets, index, xval, GFP_KERNEL))); > > + filemap_invalidate_unlock(inode->i_mapping); > > +} > > + > > static bool gmem_is_mappable(struct inode *inode, pgoff_t pgoff) > > { > > struct xarray *mappable_offsets = &kvm_gmem_private(inode)->mappable_offsets;