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 1AA6EC83F09 for ; Fri, 4 Jul 2025 06:07:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4BFF46B8002; Fri, 4 Jul 2025 02:07:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 41FF36B00F1; Fri, 4 Jul 2025 02:07:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2E8996B8002; Fri, 4 Jul 2025 02:07:38 -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 1AD6A6B00EE for ; Fri, 4 Jul 2025 02:07:38 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id BA2C41A1C76 for ; Fri, 4 Jul 2025 06:07:37 +0000 (UTC) X-FDA: 83625550554.13.2A2A108 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) by imf01.hostedemail.com (Postfix) with ESMTP id F40B040005 for ; Fri, 4 Jul 2025 06:07:35 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Ja8AfS41; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf01.hostedemail.com: domain of 3pm9naAYKCG0dfcPYMRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--surenb.bounces.google.com designates 209.85.215.202 as permitted sender) smtp.mailfrom=3pm9naAYKCG0dfcPYMRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--surenb.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751609256; a=rsa-sha256; cv=none; b=pwjpUykCVH2aoeUKZc4LZ1tBwCgau4illUNSO6QpKWUqX2lrsnFoe96toh921ccT6DamQU Cem2oISCNZ++MF95wCd8G+hHiDRyMCCIPe+aWh80JpyFZMjn+lYVHija7m/9WSbXC1rIY+ me6ItCGYU+JiNpSGzuYCmzWAk5dYuBg= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Ja8AfS41; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf01.hostedemail.com: domain of 3pm9naAYKCG0dfcPYMRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--surenb.bounces.google.com designates 209.85.215.202 as permitted sender) smtp.mailfrom=3pm9naAYKCG0dfcPYMRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--surenb.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751609256; 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=OwmJhXkBZ0rkJP8ZDJsJXdxfIUoApnDNh42agcrLiOc=; b=gLIz2U49sMTHe/pVLgauCU5P561zW9SvXmd3DJzWge3EqWQfq870vIwBGYPfEjNXMOlJlU plFXBbG5HDEQdRepEw3yauI8dXPYWaWHdL+p5YBt1DGPNO2RxOhhLoX6YWxsjnjkW6gYr6 7iSJLEzbh5zGoDM/2XLvCwFKZgdseNo= Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b31bc3128fcso977369a12.0 for ; Thu, 03 Jul 2025 23:07:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1751609255; x=1752214055; 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=OwmJhXkBZ0rkJP8ZDJsJXdxfIUoApnDNh42agcrLiOc=; b=Ja8AfS41CHVEJ9G+on6/pqwzor1fF6bFcCoX6pFeSNNZZkuX2Hfwv130jHaH1uwop2 Zzx0g3o+BGbLHK6oG/J7muCm/jNhwld1rJD0esq3XeT8mxF2mpbEwfI22El1DPSSdXnA rNHvbzY5CptRSzTcv+EnEcf3MwD/R8EaL7UrgtF5wzPa0uzi8m6zBK3AcyBD2XiduyeC MxQeb54f7PRC9sFEGIhKSJE472vlhK63P5g3LBixmAKqSMqOj6hdE2qeHwHdvnfwzDWP L91Y1QPBcCUWV1rbaynmzvWzhjjlRqGGm0Eh4OXzUtDwC1gMUqc7lDDO+njij2UD7rVT Vwcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751609255; x=1752214055; 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=OwmJhXkBZ0rkJP8ZDJsJXdxfIUoApnDNh42agcrLiOc=; b=AuruvitvXJ22+sDDPUA8HkPwhYQwCQsusurMwVKMxpQHIbmGNoHkQlUg60ELDm6+R9 Sl30pTNiOx6/n7Bo6Ux8ZurdCcaf2wmu5Ys+mkAoAo0k9AC6scyJPqbqBKqA2WUjBsj3 clXbm3sSFN7zfw8LlsVRFN1OTy6Se1lTPN+Jh/+hKBOqelws4SpWOQnLdQV+YAhQc4Gn 5zst4bpNx2RimonqLy35uNxD73lnPk5I+bE1AmpifwwO3twKbH4rG+knpyUPtbeRtTO3 utBUa2Y++I/ULNPt0kAVXTCAqXKClez0ssR+AyljJi5FHb0EgES9f4/TSL0TRsKEK6Kt mFMQ== X-Forwarded-Encrypted: i=1; AJvYcCXsrZ2ABZwJPXNFjqqFPzBQajncJmAXSWZaC9INfGB3E3IWPLhayMGjWe462Wey3+O0AcqxbHgBEg==@kvack.org X-Gm-Message-State: AOJu0YyHDUhNUsk5g9NXZLeIhX1U1GtYvHXTOvmQ4glW/mzo8ABG5QD+ 8k3m6JOf5aPMSGYMeOSHUt/q55cy54/Rex8wy6pkOK1qQyZdpDo9vqe5ZrfAAAHL1OfjA/cYhSn Dapau2A== X-Google-Smtp-Source: AGHT+IGoB8QNnIkSWC4/zUTdGlarrbysVsWS8O8UNA9J6spZjeT17zKRWVRCaC7cIc1X4P3itAYlZ+WiQX4= X-Received: from pgah2.prod.google.com ([2002:a05:6a02:4e82:b0:b31:ebae:e100]) (user=surenb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:914c:b0:220:a241:91a5 with SMTP id adf61e73a8af0-225b85f40demr2440780637.16.1751609254814; Thu, 03 Jul 2025 23:07:34 -0700 (PDT) Date: Thu, 3 Jul 2025 23:07:20 -0700 In-Reply-To: <20250704060727.724817-1-surenb@google.com> Mime-Version: 1.0 References: <20250704060727.724817-1-surenb@google.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog Message-ID: <20250704060727.724817-3-surenb@google.com> Subject: [PATCH v6 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, tjmercier@google.com, kaleshsingh@google.com, aha310510@gmail.com, 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-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: F40B040005 X-Stat-Signature: fiaebdfyo81frs8cgontmpwbnfxxxib1 X-Rspam-User: X-HE-Tag: 1751609255-284701 X-HE-Meta: U2FsdGVkX1+dyoXMkIyoIONHoShLAKAZzHu52lnes31+PGX+d0jxyOaMiCNST3PAhnSLPX10gfE+NRIb6mjme8mXz+Kn5HUVjkOM/fABNEO/ApWevduBj6s627ZKrHmu2U88pz1GNctBdzjs+OiZyVCP0NC5Vh+x9gtAU2hTkTNx3NSh1yfCBxBKfVnb5AwWVlAfu/PCFpJtHsCbHelL6PX3Z0PUDUJ4RSa7n44Olxpb9uNmu0v/7TLoVsiYIUsbdQKeUgklRxCJFWDrPfPTfcVzb0DCjfV1nFeVxTo84X8GWSnt1P/Dz9l+10V3lkyxYXVhV7tUlrKhqOZJaSNZbiMLMn3V/DMUcwNm/bkauWzT36fZBDnMwQyTe+pJdNtIKlX7eT2OsNj3h0kFcKLXgbhSuVbewujl9XgC01dGGPt3W/EnhVIqewhBUncZMngX2MPv9Lwo3Fzk4sU6DPn5GDoCLzFqyAiChuWScG8Q6/8xQGzivGZEyDzokpT1caZSjRIot6NK32rQIddYcHNhjNGaDBJW/Gjzwavymt3i6/h8gnXTsc8EO21wCPSVHZxvWrGBBE0mwzdTLSaaKbTEyNnuymDmvmaLTh++useUTrLwP2PBRTYtAoBYxm2DHac+yd4AhxyWFwWMmlFp2TM1f8vtUOla9Gei07RofIb41FnruXO/QaxB3i+DiS8wSixv4f4Y82MK/zjqCoJsogLW16LuTQE5LLTxGDDL8sQrKDGGdcmoqEWVKErhUAx8Wq48ITur07w+z8kWo5AFoBpq3Rgks0eZwNpWU7wOovz/BWlnsOBScxtRH3hED3HE4kxj2p/zBMStN78UVc4mjkRyj8dSI20IC9e/tBkAuwLULcXsc3dP8mD/4yeFLmc7qcQM8fogWByGpiJJ8I2C0TYF2+pEP0Z4wUCfy4LKRc6xrdh8iZ0FhEgcIw9IhwcPhYv/uOtFIjNIx5H+JyaTEHn 0nLYENg2 xplC5fImkK+GkK7REtQxQ49zjc6CO7eWB449baXjHfq2LXlRd2FKVOGaUaQ35TMffsOP4a59ZrLyRrYqrSoO7VeOgvFAnoI+nVLAZeFl9ZSnSyyE5v8TapfOsLYPVu7pYwY2/nWbxf23OfKsORDzq5/FibH2obBPt+kI92FfUPZwTeZwQM5lAQCfLVsFx8rsWPIRp5UwtNYOOXburw3IBKrmr67/eUSCuHcbYfoAU1yF0cOEjlQukKzdGfpIUcYdTCI2dzyKBmkh6N33ywKSVYJTlPiuaKiKC0gZ6diePwtWjTGLCWzFivZQB/3mvKZy3PZBqQsVpNWEtFQF50Y0gfTGlXB3gbh5ruW8BleawvJku7w8+7O47U2oz2Hze+0/IpbjULjgyg1b1jEVXUDeibRH5pWqGjOUEw3QOCBz2SlqPEGR9QngXQ2Ed/LptFutot5GIbXO0hHWw5mKObDQfj7qUZnYM0Jb5q0cFPIJX6KmAo+1xOGySnNf730SHo7mTwl7rAlHbXMl+UFsNBXLwcJZ4q9zYq7cMYpIA 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: 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-maps-race.c | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/tools/testing/selftests/proc/proc-maps-race.c b/tools/testing/selftests/proc/proc-maps-race.c index 523afd83d34f..10365b4e68e1 100644 --- a/tools/testing/selftests/proc/proc-maps-race.c +++ b/tools/testing/selftests/proc/proc-maps-race.c @@ -336,6 +336,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); +} + int usage(void) { fprintf(stderr, "Userland /proc/pid/{s}maps race test cases\n"); @@ -444,6 +524,9 @@ int main(int argc, char **argv) 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.50.0.727.gbf7dc18ff4-goog