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 264FCC369AB for ; Fri, 18 Apr 2025 17:50:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CE8A76B02A5; Fri, 18 Apr 2025 13:50:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C6DC16B02A7; Fri, 18 Apr 2025 13:50:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AC4BD6B02A9; Fri, 18 Apr 2025 13:50:09 -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 88CEE6B02A5 for ; Fri, 18 Apr 2025 13:50:09 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 9E72480A99 for ; Fri, 18 Apr 2025 17:50:10 +0000 (UTC) X-FDA: 83347903380.14.24C4FCA Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) by imf09.hostedemail.com (Postfix) with ESMTP id 08C3F14000D for ; Fri, 18 Apr 2025 17:50:08 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=qz8c2cQY; spf=pass (imf09.hostedemail.com: domain of 3z5ACaAYKCEIwyvirfksskpi.gsqpmry1-qqozego.svk@flex--surenb.bounces.google.com designates 209.85.216.74 as permitted sender) smtp.mailfrom=3z5ACaAYKCEIwyvirfksskpi.gsqpmry1-qqozego.svk@flex--surenb.bounces.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=1744998609; 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=NX95Q4Cv9wzSD/gXCZRQ7iUBrYCRAWvVBL1zZlzjT0w=; b=4vgGlJyT51K2FddG2eL5BRecABQPr1RlLaHue4/ghxH1/CkGSUpevSI8Y1GiaGToxp/Q7n Ej14p2XtLqJZ4e8CDz7yYgfnJ7YQsvBvr4paQOXzllEDmllvu1hy3cw9WIMc5kSsaxdtT4 8J7kOdcvct5KQMfe5G6y7MkjMWfMoFU= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=qz8c2cQY; spf=pass (imf09.hostedemail.com: domain of 3z5ACaAYKCEIwyvirfksskpi.gsqpmry1-qqozego.svk@flex--surenb.bounces.google.com designates 209.85.216.74 as permitted sender) smtp.mailfrom=3z5ACaAYKCEIwyvirfksskpi.gsqpmry1-qqozego.svk@flex--surenb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744998609; a=rsa-sha256; cv=none; b=uGutA3PsP+hd6vgB0VNz/x2hdkGxZY5NcVlT1E0JnWjD3JY4TX4I3XycGDXoMd5jAIZV65 BELjD0TTc/GkwV4z+4NiCZo6c+WrA58ZubnQdFzft2jRqP+/B5ytylRkafQ9Ut2Uq0xd1a edV5p/ofVtEE16yu6pBkMI1tHrlfE5A= Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-2ff7cf599beso1966355a91.0 for ; Fri, 18 Apr 2025 10:50:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744998608; x=1745603408; 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=NX95Q4Cv9wzSD/gXCZRQ7iUBrYCRAWvVBL1zZlzjT0w=; b=qz8c2cQYKyeUaCmOaXhxRZD2/3Rrlz9jVRpsV2JOkV++BW3BKmoyLYiAz30N/04s67 ZI8dtGpuAqJd+8m8QnD5hx5sxp+ueiCkaYQBWzCk9Pta0GZSMgmF+X2F8WtQrdy0f9l2 O/RIvgPJt4gkiRg8/3hKukHL8bevB+Y6WB5E0IYucRvsWWDydNFkmNspjPrfTrmSkoWU sFqhY/vni2Zt7M9PyP5W4V3DiA6yn+8dETwaiBC3aPhlceOW+LXL6kOj52wKQxPKje++ vhbDVUGE1HgVaIOH6YVQNZhMffCi7/ALCSiOpJe0+MtDJTOiLmwS6c0VYctmF/lqY+JD k9xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744998608; x=1745603408; 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=NX95Q4Cv9wzSD/gXCZRQ7iUBrYCRAWvVBL1zZlzjT0w=; b=llXExG+OJDyC4d1fO0GUM0oreJkxh0wBginO3Um8hoInBDpVI/t3A+lka+41Lmle/d q/Z7q+5YsbsBOhAaaeMhWw3In1zNRlxu0WJcJ584xnuAXXltGaRnArEdXuVrZ2prb6O3 6ZAomkg3nTGkDFnGMMUOYCCDfL0JYuM3EBl2WG2CFjHSssts6eYmOT0KJbjyg+Bj93e0 UczSqSolDFGOgLhaxb2FSSxmcWnYLIHmYatXj2Sv7IHC+ZYZ+U6KrDHZYP2bhlmJz5iy uSyVNtLbIbfsFx6U8t35j0ouwY6e62H7I2EXSR6ELAa9ftbLfP8QsO13irZ4xxI65d5h 2o6w== X-Forwarded-Encrypted: i=1; AJvYcCWSBmAOZz8h4soe8T9Z7RSKnG+qJ+viwqdIkSVEOBmg3zIDhF4yv+UVJ6Eh++5QWy2i5THZDc3cwA==@kvack.org X-Gm-Message-State: AOJu0YxBdDYcazPheK3it7Ny4Kre9M3CDu1hiCFxi9hfLkbf4ATZHqYu MiRbMW0OHu9wAiCqjH/E8NNqstU6y3GaAxZ8ce+KN9a55zrbzXeFQ9TNssPItTILPRLCqQpMsbl zTg== X-Google-Smtp-Source: AGHT+IFpXjxxv3q6WygkdxKZ0NcMoXnZ0n+s0fsiF2xjhvVMd0DnZR58HYYN8GWJayn2FJMme4MlbLuDSV4= X-Received: from pjyp13.prod.google.com ([2002:a17:90a:e70d:b0:2fc:2ee0:d38a]) (user=surenb job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5404:b0:305:2d68:8d39 with SMTP id 98e67ed59e1d1-3087bb571a2mr6196148a91.12.1744998607909; Fri, 18 Apr 2025 10:50:07 -0700 (PDT) Date: Fri, 18 Apr 2025 10:49:53 -0700 In-Reply-To: <20250418174959.1431962-1-surenb@google.com> Mime-Version: 1.0 References: <20250418174959.1431962-1-surenb@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418174959.1431962-3-surenb@google.com> Subject: [PATCH v3 2/8] selftests/proc: extend /proc/pid/maps tearing test to include vma resizing From: Suren Baghdasaryan To: akpm@linux-foundation.org Cc: Liam.Howlett@oracle.com, lorenzo.stoakes@oracle.com, david@redhat.com, vbabka@suse.cz, peterx@redhat.com, jannh@google.com, hannes@cmpxchg.org, mhocko@kernel.org, paulmck@kernel.org, shuah@kernel.org, adobriyan@gmail.com, brauner@kernel.org, josef@toxicpanda.com, yebin10@huawei.com, linux@weissschuh.net, willy@infradead.org, osalvador@suse.de, andrii@kernel.org, ryan.roberts@arm.com, christophe.leroy@csgroup.eu, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, surenb@google.com Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: 97ceisfyuij8jqbgjyscgp666ap7jq35 X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 08C3F14000D X-Rspam-User: X-HE-Tag: 1744998608-872686 X-HE-Meta: U2FsdGVkX1+gVZqhdPkFf2+guwV1t91bNz1L6QdBj3enB1+BeCz59WfKCO5vL4YcOt0Bu3CZyZ/w7ljfNEP5yyyIRbQNu+qLFLkxO4v2xjHWu51+qTRjNJnBScU50OR66YDig3QNsfbFM3dwVRdJgfVqg4f1HsjYBzJG62NY6S4ax1mSfl+O0GleX8Re3+1YhAzLx/lM8bMqFvLZD7uJWQ8tpwZZWKlbzZN82eIf5nRYZXCj9Gf/obqaG9KiqdXRTrwdIlTPyP5glaPPlhM3zA0lnHXp+F5kHx0lzz3n8GdTpeBBZmLI0pSehO/hy9MsdIPHthPg2v6/a9KMLuHaQw9imfNFFwOUqmzV0JYvVa5DGOr6/cGVPhCletwa/J33o6P2n6qgH+/OsOLW0K7zQ+R90wXlyF48SFCNqedCd0WtBfySLRNj0aZq+NYOBMqyXJ758KnyiX1jc6oIaaopp6ntA5Plkfpnay8e0KwFV+eB67C+pSnDnem2KS9WO/mBrpJCDpLD7QANOpLve9drtRfMDz+a2+KKvhPukAwVEgzSmp8JAKBRsdCzL/lsxN/mtSRES15AG1CKoyxdRjQKsWD6J484K31qnJ+Y0dVxAD95E0QH/GMHkp9y4D8rBZwLBAHX76vvEB6SOZ69K7BYBCoROIUluzc7iyss3LC/MWCctzkeu9mpaeAE2NQqPDNQWzyvETRUi8Trk/1fa9UzC+brrKwpmYk+eK+kiakdqS8JxYRtOwENaFF3EV4TxZu6H1tREiZxl8FfN2nNgOFrm9fa1EXvWU2wNnARWKN7pw//HdlUclTyVIkLRRghzl1AB2hwYXpF7mcJ8aUDsL4AWNkZlqFHCU+Zww05AFni6DnEf+QMXmAMxKUvGzCdDOIGKQa6FAx1Ogz7MD6i1tVAki1dy/a3DwxxDVvTM1ci6GDPRsLostp8KfDeEcBPi17CiRCupZWvfU6GzjNCwFA Xho3R51C iMll/X4b+Yf3TraS3+C7I1r3/bxIx+wIS38ApNH3E61H+zN4vEfCVEyFIvPJuZfQ05J0lH5vQmaUinFpWhPFjuNOghfKuQZIVvnFYB+bPNBZapqY2WvYjf8rkRXXGyOV9T02wb2hAZCeYGNe36h3D07hYgcqur0x4SIPMeHbTi4dc9qI3nuBmt6MMUsgbM3I/UA79wH834wGHEr6QgurZ+lYAOeW6Jo0WDa5HcgRzIcRrMvDeaqU2AjYghQ916Gzeszy4 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Test that /proc/pid/maps does not report unexpected holes in the address space when a vma at the edge of the page is being concurrently remapped. This remapping results in the vma shrinking and expanding from under the reader. We should always see either shrunk or expanded (original) version of the vma. Signed-off-by: Suren Baghdasaryan --- tools/testing/selftests/proc/proc-pid-vm.c | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/tools/testing/selftests/proc/proc-pid-vm.c b/tools/testing/selftests/proc/proc-pid-vm.c index 6e3f06376a1f..39842e4ec45f 100644 --- a/tools/testing/selftests/proc/proc-pid-vm.c +++ b/tools/testing/selftests/proc/proc-pid-vm.c @@ -583,6 +583,86 @@ static void test_maps_tearing_from_split(int maps_fd, signal_state(mod_info, TEST_DONE); } +static inline void shrink_vma(const struct vma_modifier_info *mod_info) +{ + assert(mremap(mod_info->addr, page_size * 3, page_size, 0) != MAP_FAILED); +} + +static inline void expand_vma(const struct vma_modifier_info *mod_info) +{ + assert(mremap(mod_info->addr, page_size, page_size * 3, 0) != MAP_FAILED); +} + +static inline void check_shrink_result(struct line_content *mod_last_line, + struct line_content *mod_first_line, + struct line_content *restored_last_line, + struct line_content *restored_first_line) +{ + /* Make sure only the last vma of the first page is changing */ + assert(strcmp(mod_last_line->text, restored_last_line->text) != 0); + assert(strcmp(mod_first_line->text, restored_first_line->text) == 0); +} + +static void test_maps_tearing_from_resize(int maps_fd, + struct vma_modifier_info *mod_info, + struct page_content *page1, + struct page_content *page2, + struct line_content *last_line, + struct line_content *first_line) +{ + struct line_content shrunk_last_line; + struct line_content shrunk_first_line; + struct line_content restored_last_line; + struct line_content restored_first_line; + + wait_for_state(mod_info, SETUP_READY); + + /* re-read the file to avoid using stale data from previous test */ + read_boundary_lines(maps_fd, page1, page2, last_line, first_line); + + mod_info->vma_modify = shrink_vma; + mod_info->vma_restore = expand_vma; + mod_info->vma_mod_check = check_shrink_result; + + capture_mod_pattern(maps_fd, mod_info, page1, page2, last_line, first_line, + &shrunk_last_line, &shrunk_first_line, + &restored_last_line, &restored_first_line); + + /* Now start concurrent modifications for test_duration_sec */ + signal_state(mod_info, TEST_READY); + + struct line_content new_last_line; + struct line_content new_first_line; + struct timespec start_ts, end_ts; + + clock_gettime(CLOCK_MONOTONIC_COARSE, &start_ts); + do { + read_boundary_lines(maps_fd, page1, page2, &new_last_line, &new_first_line); + + /* Check if we read vmas after shrinking it */ + if (!strcmp(new_last_line.text, shrunk_last_line.text)) { + /* + * The vmas should be consistent with shrunk results, + * however if the vma was concurrently restored, it + * can be reported twice (first as shrunk one, then + * as restored one) because we found it as the next vma + * again. In that case new first line will be the same + * as the last restored line. + */ + assert(!strcmp(new_first_line.text, shrunk_first_line.text) || + !strcmp(new_first_line.text, restored_last_line.text)); + } else { + /* The vmas should be consistent with the original/resored state */ + assert(!strcmp(new_last_line.text, restored_last_line.text) && + !strcmp(new_first_line.text, restored_first_line.text)); + } + clock_gettime(CLOCK_MONOTONIC_COARSE, &end_ts); + } while (end_ts.tv_sec - start_ts.tv_sec < test_duration_sec); + + /* Signal the modifyer thread to stop and wait until it exits */ + signal_state(mod_info, TEST_DONE); +} + static int test_maps_tearing(void) { struct vma_modifier_info *mod_info; @@ -674,6 +754,9 @@ static int test_maps_tearing(void) test_maps_tearing_from_split(maps_fd, mod_info, &page1, &page2, &last_line, &first_line); + test_maps_tearing_from_resize(maps_fd, mod_info, &page1, &page2, + &last_line, &first_line); + stop_vma_modifier(mod_info); free(page2.data); -- 2.49.0.805.g082f7c87e0-goog