From patchwork Thu Oct 10 08:59:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13829779 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 610B8CF07D5 for ; Thu, 10 Oct 2024 08:59:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 69F566B009E; Thu, 10 Oct 2024 04:59:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 650AE6B009F; Thu, 10 Oct 2024 04:59:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4539E6B00A0; Thu, 10 Oct 2024 04:59:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 24F3B6B009E for ; Thu, 10 Oct 2024 04:59:57 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E789FA105D for ; Thu, 10 Oct 2024 08:59:50 +0000 (UTC) X-FDA: 82657095192.19.0608659 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) by imf16.hostedemail.com (Postfix) with ESMTP id 1DD7618000A for ; Thu, 10 Oct 2024 08:59:53 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=A1tWz6n8; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf16.hostedemail.com: domain of 3iZcHZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3iZcHZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728550644; 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=qzUThw8QDZNv9fDcMVRqMkWYYerRinZf/dn/Fj9e+Nk=; b=CQA8TPV/bYGYcAX+Je4DmXK45EzW9VholX9dOf/v8CGkkPDwlgmAPPJZUsWTZgqbNvUbFR TOXiZoozVPNYD1mZl8/awM6l4zUXCLO/M1nO0OY1ZqV3cS+XK6P4Z4bMsKVwo+GkIL6T0O fv08VqOepDt+yP8LiruUWitfHKt4Z+c= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728550644; a=rsa-sha256; cv=none; b=OqaTBDgEB4Lns17MrcBIzQzGDc20YfHeRRICxA5HUNosVyhr7ERVHGXTAAwje0fhldjkPf kIVUECEJIDT6IzqODjzwL8tavNeA2cPYP9Zc6g0qBhxrkd/OrY79SRINRCiUeWXGD3tvsE 8KFhLTqslK613Ogk6EloN3WhKoOApBw= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=A1tWz6n8; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf16.hostedemail.com: domain of 3iZcHZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com designates 209.85.221.73 as permitted sender) smtp.mailfrom=3iZcHZwUKCBYFwxxw2AA270.yA8749GJ-886Hwy6.AD2@flex--tabba.bounces.google.com Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-37d462b64e3so217066f8f.3 for ; Thu, 10 Oct 2024 01:59:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1728550793; x=1729155593; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=qzUThw8QDZNv9fDcMVRqMkWYYerRinZf/dn/Fj9e+Nk=; b=A1tWz6n8YI4Ztqc95oJV/A5CMwiIIheqhi/O2smARel64cRY1QtE/jJseo6PGUdcwC WZA0ZK2EennpjLqCh8yteAQqlHfu78IS/VraCDnQGWQ7fnpnD9wK+BYBwZxldi8mr2HZ dTvn4o0kpxL4YU/XAfSzrTDbPdgQD3PGp8j1FBHE32Lcmxoybp26Vl5Engrz0dU3F2Ej CIv5DfM+IiVE6MDN754AXPaKadNpDB6HEraY+6G1VexX+zr1ka7B0qVQHPuSCU4lTbVb vOO60hsMps0qi5x2oA6nmWOgq0mlhlGdtiky45mMQ8eMF/4cBeYlWy6Lg9ZCn6+BT72m AbYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728550793; x=1729155593; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qzUThw8QDZNv9fDcMVRqMkWYYerRinZf/dn/Fj9e+Nk=; b=j/tzwBiGZHEWCsAUmQgea7+xlybA3SdqRaTCos2b4HgWE2i4YKU/S1lr+RN43AKwWS 8kZaJwcpUkXTIUND2WIxrlY++p4hYPZfPUUqlNd34HtoYlv1OJ0PRclHezf7XraM2XKD TECLluFx/MFX6K6/vmm98IVP69+tt3mMNQH6UCOTmHj/5EGrkoLSt/QXK5NuhWrl7sPJ IBRJ8iOBx1DACBK5KM/zXDp2RKgVYkTGup4be8DKpUUhGIpSVq8DHcLpjvuCepNhP2kB UUNbk0u0MT6LQsOeSOGMCa+SKqJKcZ1OgEr17MvIbxjxWfrGMK95uV7HBkyLiMZmuiNe XcnQ== X-Forwarded-Encrypted: i=1; AJvYcCWEpg2tnqemFoiIASuVQEEF8LpDiodp6gzSt/Cwvhsbj7wj+4tklw0iIZLrDgFYIr+avDTXDJs75A==@kvack.org X-Gm-Message-State: AOJu0YwHSE5/6yRBbInIia8AVLmE4T/WnAoE1o/Z5orS7fPp9Q4B/Bjf u/ex/to9FYZS8bf5HzV8980sGhNu9MSINxtjGN4a7t+8+UGIghgOW7G0FR6m7VtzZhKdSShtCA= = X-Google-Smtp-Source: AGHT+IGnEPVNJA5hNA6zgaReNf096hRtQziouC1E1cxYtRNCKe4dTpHEgBlCo1zAywzne6jSW5D++vxtyg== X-Received: from fuad.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:1613]) (user=tabba job=sendgmr) by 2002:a5d:420f:0:b0:37d:31a7:6610 with SMTP id ffacd0b85a97d-37d3a8ef27amr2808f8f.0.1728550793139; Thu, 10 Oct 2024 01:59:53 -0700 (PDT) Date: Thu, 10 Oct 2024 09:59:27 +0100 In-Reply-To: <20241010085930.1546800-1-tabba@google.com> Mime-Version: 1.0 References: <20241010085930.1546800-1-tabba@google.com> X-Mailer: git-send-email 2.47.0.rc0.187.ge670bccf7e-goog Message-ID: <20241010085930.1546800-9-tabba@google.com> Subject: [PATCH v3 08/11] KVM: guest_memfd: selftests: guest_memfd mmap() test when mapping is allowed From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: 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, ackerleytng@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, tabba@google.com X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 1DD7618000A X-Stat-Signature: ydzqcakapznhkrsk9xcru9jif5wdh7mf X-Rspam-User: X-HE-Tag: 1728550793-701618 X-HE-Meta: U2FsdGVkX1/b0jdDOK58I062+7LZ3ch3i0NnNXBBEXpOt5rcIJb0BZvNdXBuywrU9Ui5xfc+9yRepelQQh8NQnt+VLJPptS5K8dQ+OlNDnkmmPSoEhhNntbaMMp+xymT/AM+e/SjrbhK+Y/AGQrVfyqXHj2Zma4T8L7SmPpSYQIWaugsfVPoit76WcC3rSCj9/cvksvthCk6KqKM+paJ4QmT7CEOrbttbaID7qy8g+FRvE2VbM1PzqFYnrD6Y3+1CEVycQw/+6bjfZzO03MFHqTA5tEMQgXbVm8j1L5/PA9JSDHBwl5IUFzFJ4vBOXEkKvuH/ulp66P3/J/jPim+cdjDhbZlIGK/o1hi+Iox4cIwQLPgvB0DBkCocuwX2IfHN+2PA6c1yos0zHMmr4S28puPSveQkpi9VZ4TbzaVxJTrI39pgWMfK0eHD5anImIulAxwqojsQuziKKQuD65Dk3m4Q8zxOOCkTu4OqITBkuJDUOKCL/AxTkqa95N0enZ/8QDzdpmjvB7tHZcACjjXhbvcEfzKUrdUSpYCeWcKUO/nNTEeYMpXRbRWKHZZhRyHboWoGn2LZpoVSCq/lcelJcW8hMUGKEiOpuPyeSZoryACsH2rty9Ci98foEBYzOGqAIFvSzYGNmJlZLkD5o2c/cEJmJScmv99s7vbUi/OKqccwFWX1l4tcfj2JHgx0qGbGgO1OkSW1sIzI28Vz/ohlBBX7Z3UPIPazaWOk0nWaCQm2jYRiQI7lVJyqSXZSTaDLlFVKW5B95QLR62z6TC0zPloz4dN+ljQaSmKPIxtto/7DGGcrRJ7jnLytMIwOg9ZLAOQvY2qnpQLpFCrzTZ9YV9GaSquM1PUMct4blmDxMLT0ZjbAwlGVQ6LqqJCKpk/m8+44G6FR8NWgygtLZXucUxh7z9V1dl6MwlfwQicbLrjSjXTPySsbDIj3FR8LbtO9k+jODw855k0oxj4UG3 hHpfhKVv BD6JUJXbWtOxairHLvpLS+hnQOYijLSuGg8dauW7C/nEHMGPMPW6TL9bY9UsQfOa+KMFHsC0NqgYGlXi0rijalFFbRy3lNCKzDwEOPm5x+lNK73WxcUUTXx3JwV7AkOgYwdbYCldjSrYYNLb3ieA3WGpt5Ft81t4PKRR5ENihMuvkUoMxb0tj/lEMzu3nXRSbXmCohxNx4EzbBcd8hLDrOqvIsUhDix9PhxIxGzgqJupPIWlMXSwu4v84GGqxBSP5gJdZpInhWoGBPAR1esUz5hSiqliaXSemF1XDmy7btWsXsSGgulCN4anK3BV7B0Tb0GKL34rmRiBh22xh71b+frSUxedk2AI29YPIhU66JKfqbzarYxNx1xaRS/QVjkSQLJSpyV5iy/1nTYpMgqOARTnG47T3pTJ4I8onYNS8c5bNPbrZEqQJLRXgyyL2TktXs6VzsfRTdKGunjDUzU4aSeVQ1x3BMChy5Gyjdn2f54trdhG7aA/JaIiNw13hYQvMgZQWb8TGumms1o//GXOX2nkGO3gevouczElE/HfX6MjmxYvbxRxbHpOiYD8kxIFd885kpxBGFnWb3nBgfBgLX6eatkS0n1Qr9G0wbbBIjCtJM/B8H3sOzPFSTuKarZyhfbcfkmLbAUpFUlsDRzrmHvFMWNKahFDVvFPKPvvIMiNAHcKKJPsDkpGL0o2xwoHb5HaJ 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: Expand the guest_memfd selftests to include testing mapping guest memory if the capability is supported, and that still checks that memory is not mappable if the capability isn't supported. Also, build the guest_memfd selftest for aarch64. Signed-off-by: Fuad Tabba --- tools/testing/selftests/kvm/Makefile | 1 + .../testing/selftests/kvm/guest_memfd_test.c | 57 +++++++++++++++++-- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile index 960cf6a77198..c4937b6c2a97 100644 --- a/tools/testing/selftests/kvm/Makefile +++ b/tools/testing/selftests/kvm/Makefile @@ -172,6 +172,7 @@ TEST_GEN_PROGS_aarch64 += coalesced_io_test TEST_GEN_PROGS_aarch64 += demand_paging_test TEST_GEN_PROGS_aarch64 += dirty_log_test TEST_GEN_PROGS_aarch64 += dirty_log_perf_test +TEST_GEN_PROGS_aarch64 += guest_memfd_test TEST_GEN_PROGS_aarch64 += guest_print_test TEST_GEN_PROGS_aarch64 += get-reg-list TEST_GEN_PROGS_aarch64 += kvm_create_max_vcpus diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index ba0c8e996035..ae64027d5bd8 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -34,12 +34,55 @@ static void test_file_read_write(int fd) "pwrite on a guest_mem fd should fail"); } -static void test_mmap(int fd, size_t page_size) +static void test_mmap_allowed(int fd, size_t total_size) { + size_t page_size = getpagesize(); + char *mem; + int ret; + int i; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmaping() guest memory should pass."); + + memset(mem, 0xaa, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], 0xaa); + + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, + page_size); + TEST_ASSERT(!ret, "fallocate the first page should succeed"); + + for (i = 0; i < page_size; i++) + TEST_ASSERT_EQ(mem[i], 0x00); + for (; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], 0xaa); + + memset(mem, 0xaa, total_size); + for (i = 0; i < total_size; i++) + TEST_ASSERT_EQ(mem[i], 0xaa); + + ret = munmap(mem, total_size); + TEST_ASSERT(!ret, "munmap should succeed"); +} + +static void test_mmap_denied(int fd, size_t total_size) +{ + size_t page_size = getpagesize(); char *mem; mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); TEST_ASSERT_EQ(mem, MAP_FAILED); + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT_EQ(mem, MAP_FAILED); +} + +static void test_mmap(int fd, size_t total_size) +{ + if (kvm_has_cap(KVM_CAP_GUEST_MEMFD_MAPPABLE)) + test_mmap_allowed(fd, total_size); + else + test_mmap_denied(fd, total_size); } static void test_file_size(int fd, size_t page_size, size_t total_size) @@ -172,13 +215,17 @@ static void test_create_guest_memfd_multiple(struct kvm_vm *vm) int main(int argc, char *argv[]) { - size_t page_size; + uint64_t flags = 0; + struct kvm_vm *vm; size_t total_size; + size_t page_size; int fd; - struct kvm_vm *vm; TEST_REQUIRE(kvm_has_cap(KVM_CAP_GUEST_MEMFD)); + if (kvm_has_cap(KVM_CAP_GUEST_MEMFD_MAPPABLE)) + flags |= GUEST_MEMFD_FLAG_INIT_MAPPABLE; + page_size = getpagesize(); total_size = page_size * 4; @@ -187,10 +234,10 @@ int main(int argc, char *argv[]) test_create_guest_memfd_invalid(vm); test_create_guest_memfd_multiple(vm); - fd = vm_create_guest_memfd(vm, total_size, 0); + fd = vm_create_guest_memfd(vm, total_size, flags); test_file_read_write(fd); - test_mmap(fd, page_size); + test_mmap(fd, total_size); test_file_size(fd, page_size, total_size); test_fallocate(fd, page_size, total_size); test_invalid_punch_hole(fd, page_size, total_size);