From patchwork Tue Mar 18 22:14:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 14021644 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 40385C282EC for ; Tue, 18 Mar 2025 22:15:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D3F3A280002; Tue, 18 Mar 2025 18:15:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CC829280001; Tue, 18 Mar 2025 18:15:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B6A2B280002; Tue, 18 Mar 2025 18:15:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 9C78E280001 for ; Tue, 18 Mar 2025 18:15:04 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id F2ABABAB76 for ; Tue, 18 Mar 2025 22:15:04 +0000 (UTC) X-FDA: 83236078128.30.8BB15B6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf11.hostedemail.com (Postfix) with ESMTP id E21B440002 for ; Tue, 18 Mar 2025 22:15:02 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=TVEDB5S3; spf=pass (imf11.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742336103; 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:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=k/UAkoyXYAAAj8ppLHSspsrG6Ksk9pE1Zj0H/JtivFc=; b=3nJ5y9HbLL+sviit0AG0mGNDONeJFRakkTYuKILfE4kopNH71GeG3oDf1A2oSL2jDGkhUe C9hkA/5MAvhwhqaTiV3Q1gCB3ZvgaQfghYL4jluIbXcJuKJLIbGPnRZ9diKPhs2+6luOpW FBdbsc8cYj5qWlQq0sSkBrSj7noFdec= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742336103; a=rsa-sha256; cv=none; b=wnX7SY6Mx45lSc+lG37We+/qq/02De+CAMziZBnQsQn6ycubHwyGB9QzyNaI5b1PYbGrer TJx+hqVdnhHj9IU9hVNxIqmYhT65JFPgWWK/rJf3EIJvkqI5rnmY/XY6Cx/ixkd1JjcZPG adsyrrCXjGIiCCL8ZakZrP0ax1d+Vn8= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=TVEDB5S3; spf=pass (imf11.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742336102; h=from:from: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:content-transfer-encoding; bh=k/UAkoyXYAAAj8ppLHSspsrG6Ksk9pE1Zj0H/JtivFc=; b=TVEDB5S3Ol6wuiAM5ezMUsr2nrTq3GB2RXaWPF7grLZvGLEQa3gVps4HWUs+oRHqW7pSzZ j2IgR0Wc+t5/TeVD2/N7IwdEOSJoNGCGz/UytIlK3lQWNieJw+ukocE9eBUb2vci7C7/4v X1znz5IEHMsCjFGCoHaO/GlOFu2xEpw= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-517-RgS_IEtEOUO4L8VhlTFyBQ-1; Tue, 18 Mar 2025 18:15:00 -0400 X-MC-Unique: RgS_IEtEOUO4L8VhlTFyBQ-1 X-Mimecast-MFC-AGG-ID: RgS_IEtEOUO4L8VhlTFyBQ_1742336100 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43cf172ffe1so32989565e9.3 for ; Tue, 18 Mar 2025 15:15:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742336100; x=1742940900; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=k/UAkoyXYAAAj8ppLHSspsrG6Ksk9pE1Zj0H/JtivFc=; b=LirmrW9ROS+pDIQ702a+VvD93HX0zGuoW9ltfy7B9LGDuZHLg++M6X524JMXPPRUUM HX0dkyVWBkGUQBLHLo5Pg0jtUeg+LHme+RzxEQbAqG8i6UqOjm00G00fwm5Rpumw5OPm jIfzl6ESjPtu4YXtHFFjUKVpWtNUjKgP8L8ZVyLaX+u4PAaAFqW9V/KGWZ41i8gAZ4n8 IsAJTAvFQEkzoCKRMV2XQENA9dPH/N5d9/sVyWnJ2jAbRCs4rr/PX1BhlgyJFYgDaFWO vIueqlX8tT4xW1as7Gb8PG118ZEVygKJtzVsJ6pbK1R61IlYol5jwjtbTUET0Gk3Pskp R13A== X-Gm-Message-State: AOJu0YzUQCAkgloZxEhQMdMgO/iPi6Ki/nyfoktRxtTg3CPqY5eFIykf 4VqnLEEayyscqv34GJEhXrK67pDKN2zTFAEwjWC2REOk/NIt9kMYPKseqN33qE3AVTjQgAb6Z5o gtEq3GF52lK5L6iKlgmUtZ9/3vmzwKrlL5TIn88JKMnbNXe2k X-Gm-Gg: ASbGncsWBoAp6kGl1S3m9e8ffXHk4WWoFA2pHlbAqataADv9UUyqiyd4EL0CBHJI3vB p4s0HTHdGVzOTfRyeOclUJm4dElmsvb6165F+ZfaHuNLfUAkr0Y2e+MkSQlYsxO4KNg+ZO6EezL tcNzPr3pum95fJyZSgEX3BU2kFkbGPfsbzorRQAxJOb1Mrqoalef6QUipgbkKXiGcB6imLEGMXL wRLt2I/9q7t7G7kWR8zg737mOCrXRHxI+4liU6MCwKXBrcsIl8SrpZpO/XXY9j7KkUmqOb5XzsN h2Fw3m4qcPTvKe5Xce8Bjd4lnYN8RDnrG3rE+zo/JoGzvuDn8GX0w6XDAlquFs5etz3398UchFD 7 X-Received: by 2002:a05:600c:5250:b0:43c:fc0c:7f33 with SMTP id 5b1f17b1804b1-43d43781e4emr2290045e9.2.1742336099692; Tue, 18 Mar 2025 15:14:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE4p4iEcIpIkoqdTFEFOZVeOZYDgFaQD/Z05qK3YULm0myWGBlzWfRjIZbHbmsiH0EHYYUrsQ== X-Received: by 2002:a05:600c:5250:b0:43c:fc0c:7f33 with SMTP id 5b1f17b1804b1-43d43781e4emr2289795e9.2.1742336099275; Tue, 18 Mar 2025 15:14:59 -0700 (PDT) Received: from localhost (p200300cbc72d250094b54b7dad4afd0b.dip0.t-ipconnect.de. [2003:cb:c72d:2500:94b5:4b7d:ad4a:fd0b]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-43d43f556a4sm317825e9.22.2025.03.18.15.14.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Mar 2025 15:14:58 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, David Hildenbrand , Andrew Morton , Andrii Nakryiko , Matthew Wilcox , Russell King , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , "Liang, Kan" , Tong Tiangen Subject: [PATCH v2 0/3] kernel/events/uprobes: uprobe_write_opcode() rewrite Date: Tue, 18 Mar 2025 23:14:54 +0100 Message-ID: <20250318221457.3055598-1-david@redhat.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 898MfDGniUCciKhmjCktT_T4HnQT6tVmhwrv9nebHpU_1742336100 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: E21B440002 X-Stat-Signature: 6auwif48hft1qj94hmckbif54bebqfk3 X-HE-Tag: 1742336102-807598 X-HE-Meta: U2FsdGVkX1/bC6MG+0KKkCe4VunUx8TjfuqFS6swf1vJORCPvRpWnNykntiEFN+MA1Zj0jH9mVKrlh1y+EtmmNNsJtkVr/RC1PgTQyxVuEz8XkmggNWasRPZBAlbjBYZNaHFieXKPDyOUn91G03jp1nhRsAxQ5OOfUAdHwPLvTV6JL0f/RdaIoK7+NUXBkFddHMMOZdhiJmee2I5vEzN/6ue7hvD9J33V745DyHdc7xhD1C9suPZpHK0eHnGYN0CCsz44TIF0VMbVkB5KWQdYCbbLJmlLAhqszYjnYUAdE4OXyi53BofS3HVs+NWgHqD9P0F5z4hiwjGPzJXVSNxxHeKNpcZeQJJylMKsxtxRnBpqZ6bDOS1IgOsNF78ncYEPsiKoNsNJqo7IaZHIXxg0mZCb7mwHEQ+T2dHBlJaJwGSK5T5F6YKwl+A5S2vubdB0cSp+PZRiAhVt2fnFOlVs84BC8LbfPZJJhgYPXdfAC/n5CN1p63s+xWApOM6gAt7+3c7B5sUw7j6N/j6zsaph+es5UPWqfA+HpzPtFqm9hnqVLXP2PjyLsRKKTLEA8/19bBcIucxI+rAmJGurZButjeCQiYREJ5xlFp+bIzgXTL4Bro1TgKRgEY0uqzf0cqb97lvgFLzYnlJ583pHGCSh2XPVKDPbRQngqpqaDlpQJmbD7/lIZ7X8S+oQXqLYKCSn9A58vKFWaz+ac5wXNcMTVFO6aZTC87kxyzUqqfmXGRovBX3T1yYnQlCrvDEaSBp+OFGtJMk56McJrx18mmadqUMRsu4gguPGSnbOfwRdawGeO+v8LUR/R6lL0X+SqTFLRU5Ep1bIfwKML4jpKlkg4xHOkcCfW9uyFs71sqRrs8KeJEdqMtTVYVUjHXkcrvV+QJVkdhWA7OukWjcIWlrUrpWa+5+5PZWCf43jsy1AW6o2A/GgygbHJ5OJjFDpFQqlydWLWBH1uUDSeGNkZ/ M4f4DwCy RnTQXmyS+vNewucHnCzbrqBYeR9OGqCn5QdLxcYy/OoZV4f1oK5njaODXQhLXJZvalxpJlhcg7lDGx54vZ1QU+izlqYfBlhRjMqzw1p9vDspBKfRy1nM+0dS0TE5B5s+QvuBPfZAO4Or6iRbhBNj+Wvo133I6jj4UR9RdJPXiXDVuaHUe/G9orPKZUROZG3NUOoem8A177FnU1WCyd+jlkROdA6uLOalpGO1OmmDUFF/bcIQue3KoZ7qYcd7fx1q9P4No 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: Based on mm/unstable. Currently, uprobe_write_opcode() implements COW-breaking manually, which is really far from ideal. Further, there is interest in supporting uprobes on hugetlb pages [1], and leaving at least the COW-breaking to the core will make this much easier. Also, I think the current code doesn't really handle some things properly (see patch #3) when replacing/zapping pages. Let's rewrite it, to leave COW-breaking to the fault handler, and handle registration/unregistration by temporarily unmapping the anonymous page, modifying it, and mapping it again. We still have to implement zapping of anonymous pages ourselves, unfortunately. We could look into not performing the temporary unmapping if we can perform the write atomically, which would likely also make adding hugetlb support a lot easier. But, limited (e.g., only PMD/PUD) hugetlb support could be added on top of this with some tweaking. Note that we now won't have to allocate another anonymous folio when unregistering (which will be beneficial for hugetlb as well), we can simply modify the already-mapped one from the registration (if any). When registering a uprobe, we'll first trigger a ptrace-like write fault to break COW, to then modify the already-mapped page. Briefly sanity tested with perf probes and with the bpf uprobes selftest. v1 -> v2: * "kernel/events/uprobes: uprobe_write_opcode() rewrite" -> hold GUP reference longer so we can see if the page is still mapped when performing the folio_walk -> Move anon-folio check -> Reshuffle / cleanup some related things RFC -> v1: * Use folio_walk and simplify the logic Cc: Andrew Morton Cc: Andrii Nakryiko Cc: Matthew Wilcox Cc: Russell King Cc: Masami Hiramatsu Cc: Oleg Nesterov Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Arnaldo Carvalho de Melo Cc: Namhyung Kim Cc: Mark Rutland Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Ian Rogers Cc: Adrian Hunter Cc: "Liang, Kan" Cc: Tong Tiangen [1] https://lkml.kernel.org/r/ZiK50qob9yl5e0Xz@bender.morinfr.org David Hildenbrand (3): kernel/events/uprobes: pass VMA instead of MM to remove_breakpoint() kernel/events/uprobes: pass VMA to set_swbp(), set_orig_insn() and uprobe_write_opcode() kernel/events/uprobes: uprobe_write_opcode() rewrite arch/arm/probes/uprobes/core.c | 4 +- include/linux/uprobes.h | 6 +- kernel/events/uprobes.c | 356 +++++++++++++++++---------------- 3 files changed, 186 insertions(+), 180 deletions(-) base-commit: 40caf747267c18b6206e26a37d6ea6b695236c11