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 F17DFC77B7F for ; Tue, 24 Jun 2025 19:34:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 43A776B00AE; Tue, 24 Jun 2025 15:34:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3E9DE6B00AF; Tue, 24 Jun 2025 15:34:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2D83B6B00B1; Tue, 24 Jun 2025 15:34:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1A5A46B00AE for ; Tue, 24 Jun 2025 15:34:10 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DE6EE1D7D4F for ; Tue, 24 Jun 2025 19:34:09 +0000 (UTC) X-FDA: 83591295018.25.2A6EDE9 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) by imf25.hostedemail.com (Postfix) with ESMTP id 13AD1A0007 for ; Tue, 24 Jun 2025 19:34:07 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=HI0foFxM; spf=pass (imf25.hostedemail.com: domain of 3rv1aaAYKCF8PROBK8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--surenb.bounces.google.com designates 209.85.210.201 as permitted sender) smtp.mailfrom=3rv1aaAYKCF8PROBK8DLLDIB.9LJIFKRU-JJHS79H.LOD@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=1750793648; 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=UC2aFr+2hBpo4c8OQj6ulNMqnFjS9I9wfu23t0p6gWo=; b=APLznYmkbUETxg1LzC3vJSA+XUT3vdEhX2SMIX+GaHyCc5e7/+Wayl/0wX0EQAuzs7AYmq 1A9T031MdhghLq774agerLMvf/JdTk7q/DHE6JZ3JAa2B2FnjG06M7Fc6YOdDzuf8HHxZT eygeMEGPDE3T2WZOknGyuJNCB4DZtpI= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=HI0foFxM; spf=pass (imf25.hostedemail.com: domain of 3rv1aaAYKCF8PROBK8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--surenb.bounces.google.com designates 209.85.210.201 as permitted sender) smtp.mailfrom=3rv1aaAYKCF8PROBK8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--surenb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750793648; a=rsa-sha256; cv=none; b=atOHed1/dlMCRRsGaoSK8M+FG2wa62Q1aYMp3aRol4mIQS4Dys4uwenC10XNImngweR7eV sfvn8z7ehmeMq13QZbGdkd2/kQybNNLAN5HC/ULimDs5UigEVR5M0P7mR5Yixd2U6CgzRI oRoYLgOxm9Z4nkKuXJ6hHsZvLVsHFCU= Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7377139d8b1so4226700b3a.0 for ; Tue, 24 Jun 2025 12:34:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1750793647; x=1751398447; 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=UC2aFr+2hBpo4c8OQj6ulNMqnFjS9I9wfu23t0p6gWo=; b=HI0foFxMhWBGLSYKoRfy+zRDaWFisJnBuQ2Yb0Q7V4vE5S43ZGcMJ1Q1Alkx2UUnXs rmTT94zCZTQLZ8Uoc9pRJunw4kfSlDbKCDgg84LwUibXKyO09fCubzzrchdBgGTMYCPr tXwHK0YOkq9lN5NaElsCj0l4b84FArwe2nItYzn65j1yBIhFpuXlNn2f3ljQ9Yw14rqX CxBNWtXNvVVIkkvdhUPGpXpgM125R5DKH0eD8toPSjfhAcb9T2OdRsLzDfX8I5BarGDd JQoDLl//JLqVDSLj0rTr+Q/+dBtVmDrqMXKkZcrG0m4oeQwZA2gkA2G/Ew/HCGM5rVLi J1uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750793647; x=1751398447; 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=UC2aFr+2hBpo4c8OQj6ulNMqnFjS9I9wfu23t0p6gWo=; b=vOVonn00et78p8MsBhrfWQE4U+y3MYOwjLnwqQQHHHwgyZQTzWwUZBOA3SJqGWVnXk Dl/EpqPvHgq89+CIsWPk86c61d0mPOA18Ja8FmNhdeey/BAMo59GNvo6Z4X15fXiThoA WJBtxU9mLk1niTwIG9zuEza8r0h7LQf1P4pV7seCnCEMo9T8qPLIqHD6YsR9VhvK1MYk NZsX+KcPUIk8o9VZG/9Jy6bG+dHrUvrigaD2AQ6RDZGzHApYcCZeWDKOeMQGHyGRViUU 5lgNzbERVSlzK9uJcikXFO/62zig9tuV5SQwV8qAUH7GD+Q4o19QPuZQL6WuyYeMBusc u5gQ== X-Forwarded-Encrypted: i=1; AJvYcCV9/HtbOuLie8nW1azl8FNe8krIHyy/RxvdLutH5C4T4XZWgdAO0HqJ1B5mg3CmfQ4MPmujeHBf6g==@kvack.org X-Gm-Message-State: AOJu0YwKpD5+tjZ9Y35I4yYzPaCHpVVYgA3OzBPwI2y0RLUbOVewCTtm M8Ul+nMmPTEvGKvyWUqB9805YLE9e9/Pq+hI556SccoYUmNAzHuiTsRJaLX85PV/jZ9uEdMgT6r Id8OahA== X-Google-Smtp-Source: AGHT+IGXFGZq1eG2J9AB8OK4tRQIFjL7wLANvEFPeXTMgxcyIvcd791KpwM8NoFdIHzomkbPKUWUDTzIDUk= X-Received: from pfwy15.prod.google.com ([2002:a05:6a00:1c8f:b0:739:8cd6:c16c]) (user=surenb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:124f:b0:746:1e35:3307 with SMTP id d2e1a72fcca58-74ad44fa9e5mr508606b3a.14.1750793646830; Tue, 24 Jun 2025 12:34:06 -0700 (PDT) Date: Tue, 24 Jun 2025 12:33:54 -0700 In-Reply-To: <20250624193359.3865351-1-surenb@google.com> Mime-Version: 1.0 References: <20250624193359.3865351-1-surenb@google.com> X-Mailer: git-send-email 2.50.0.714.g196bf9f422-goog Message-ID: <20250624193359.3865351-3-surenb@google.com> Subject: [PATCH v5 2/7] 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, 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-Queue-Id: 13AD1A0007 X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: 71y67wxocc3htrxmm9d6ujrwad9tcqpt X-HE-Tag: 1750793647-209773 X-HE-Meta: U2FsdGVkX1+tc3M/VLUkCbvrs836j8pV7l03B9ElOZAb8LGXCpmyKgYQdlxGFRu6YlB9yfDOyrkNQIBMYggEgSYqpMtqYzh3h8u5GpkESHzZBWCteqDgs7PSNoQWE948VNHBIGArt60cK5eA0ErUPrCc/m551NHnVILKgLTzj/+Gc/JtpyIXDYGZU8PofajgLT+b2vGxD1P8L7TlgpoxSWuZKc/rODkZmxGgnHC0sAhGFm++taAjx31WIzZylqb0miUFhQ6u4KQFwomkfNwmXFdyRugEWvi1oTGE4AkQjFx5hQ+K1Or3CmTmGl7jJcUVZb0oB5wmSHH/mHamzXZfIpEZqo91JlsoRHxAddlcBW9XW4d78cMlouZJZ4U86IzSUknTZWZoZbOXS09FZCRgDY+KBQA2FMBYGdDsGQ/ztvr3z3jI/gFNbc8UC1nVRwnzbed+eIXD9TAszbgWw51jeOf8VGs/zOR+SQjqX9ovmbQshvyKsOFBcU36dieNbb2iunITXssH+kCEQqsPWAE10uPiARSzOgLZnLmWeSC6j+LgeDUeerZGplRl0zowMpvU5f1LpnHiYOpMQzvO65gYq/74iiq/W+hryG+u3YSQdn4AXO1fJ+j4WID6rZ99OEBP49tr/muOzWC01k88L0Mmz94C9JTB12xPchnuLeKOo720mKTX2P/5N7Kr7ZrReEq7kM6qqgIJZsOv/BNxJBiR9s40vBfL6TLSEk4g6PrnL0us71Q96KvGxyccsQSElnxl4eCE51457D/5lQqSv2S+rMeOgVMYZUUj3TWX3i6BJtKjhGJg2mPKskTBU7bwZPiODYrxRaLntY6ZmF8ruANf0jD+eXtlLJW9AteCiZvTvOD1gjEyj3CS53KNAzRWXX1eDp5ff8/4RvYXQ89sWGIQehMPhFBDtiHy5O/ftfOfJwaAMlH1EPCWyXgRVmU2tvoHm9Z3y/qdnJ1jsPfZdDi 7bcZmP9J eZTvQJD0PfbByL1vhKPzVR9iuyhERrCFabkgxfdIYf6YbTqIN+jjV/6EccHmjOnf3v1Z4lLwpyGGZ0PZuG18ZiP4xEiiHeWpikWvHUwQE/HcZ0fgS1/BFXurzuVoUO1c+zG+3u3NYm5rplBFkzQsQk3ScG6fiMxERDFocJMh6rqGdXWnaig4dlVQ8KETt3sCoq5WUYLwPvaRvr/EkcMT4UyqULZ7bUnATKYuuoKgx72rt6eJoDjUhPkxrRjN2GjZuXEW0GgHQskf9p/7rzOeefhaAL+UlvTZXO/nYdlJ/+E7GrVv3oAV6sCAMdQA8rqG3n9tm6lMXYKZpry0TetJrscl/o0X32ysH/qMHrPucEqjZ1vhkSBJbMdrvbddkEgDpAQZaJTHPoTQ3LCcD9WJthkYvWwZya40nOg5ixyHnAUwdYhDn951iylI+HFBa4wwzafKR+UqauVMOFbmgj4yX4YyrGzms6bbNhdAkijxujwlhLlkgFthDZLdt5lJlt6LBo0YhZEscvhVD7IdB3335oJnwHAg4Iok+tYmc 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-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.50.0.714.g196bf9f422-goog