From patchwork Fri Mar 21 11:37:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 14025293 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 222DCC36000 for ; Fri, 21 Mar 2025 11:37:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C89AC280002; Fri, 21 Mar 2025 07:37:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C3C05280001; Fri, 21 Mar 2025 07:37:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B047D280002; Fri, 21 Mar 2025 07:37:19 -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 91EFA280001 for ; Fri, 21 Mar 2025 07:37:19 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 3BD87C22E7 for ; Fri, 21 Mar 2025 11:37:21 +0000 (UTC) X-FDA: 83245357482.29.1A897C6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf01.hostedemail.com (Postfix) with ESMTP id D864E4000A for ; Fri, 21 Mar 2025 11:37:18 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=OnPNOEda; spf=pass (imf01.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=1742557039; 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=x+mJBPP4OyRbz1YPHbK6SqYX7BZklQ1ziSixoz9Cwdg=; b=GenJlf7b6bkL8Hec2Y+7z0lWnULVIZIAQhqU0b44osO+XPxIjboMa2ETE3yciCd/o5Hn1v gK9BzQnEdBPQEaaau7d/xLa0sz/GYt9EqEl9brdhKieyTNCSA2EnXlAwmCO6lVszj7bpZI /GqXYc+YeeE3gLMjPbg+L4+Yk2zE7Sw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742557039; a=rsa-sha256; cv=none; b=Bp3vQBnzA9ygOQF2LgK1iBxeoGNng9zVJ+YOdu3uyGfVjHSCdzwrrt+3hjRjqAqIoKNHcc 66kK8wWT+PlEHB1N/pskTAVB2fnZFOy+qj6Gu1qjH9R+AwtBtfgduGkWtlr/CzlnljPtNJ 55KmQX8a6FzQdP8fPCf1PCSZbbJBL2g= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=OnPNOEda; spf=pass (imf01.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=1742557038; 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=x+mJBPP4OyRbz1YPHbK6SqYX7BZklQ1ziSixoz9Cwdg=; b=OnPNOEdaUAb0603FZnGmj9qli5H1bCzRtPhd94Sq/3sry/HmD/phISU2lii4Zj8wufNqJZ 61fJLz0t8dAoaLdQTfoDsj2QLJ4J7d8cfQmzlcSkggqmJaOxskz98K5UnicySK0+Pu6vop YTaSKagOoo2Nx3/h6PZHoG3kUM37FQk= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-465-gBflmTdpNF6TmZQSOdmAqA-1; Fri, 21 Mar 2025 07:37:17 -0400 X-MC-Unique: gBflmTdpNF6TmZQSOdmAqA-1 X-Mimecast-MFC-AGG-ID: gBflmTdpNF6TmZQSOdmAqA_1742557036 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43d00017e9dso11729085e9.0 for ; Fri, 21 Mar 2025 04:37:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742557036; x=1743161836; 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=x+mJBPP4OyRbz1YPHbK6SqYX7BZklQ1ziSixoz9Cwdg=; b=gQcEkoOSc9grwyhbIh5x2I/4469tkgpe+C8QgjpYhPCjVcGAqtSWg0/eI2aGSM9KP6 Ek9nfX/cW5jdxyLBZ2m0g7+Opn3QQST3SqSWTtOQFOppXF4z+nKhispru6NZNyfCtD9I NSIX1COrozICke43YQsYz94jGsm4l4RxeSD/TPf27jobIj91wvW4s8v67UnH5ezTOHR6 2HF6r5wOu18bdabMQAEQPPQNrK4/SK+GkIMPz4OlJhhcQwpC/OZjvLfMqyCrZmVifHmj bDQeFkt7qQ2lcGH53m7k4YmsCy1gcGecRStdEqYlnJoaCrcRzf53UHy5u8IarrRw0szK Kk1w== X-Gm-Message-State: AOJu0YweedFtkoOGR2Y4JZ+PJ9ZpGuzdXmKPtQ1tvhWt8nmwQH+mFzD4 hER3tMTE0SACAKynBOqF/Mju/WqdPFXtqpzDv/Lk2HvaTTU/yRutC2uLOq5vGCvSm16uWxedo48 Ga+wv/dOZ7oFXj+/sn5LZsozsnAUR1s6uhncRRsdmaa9fwYzg X-Gm-Gg: ASbGncuRcdszSSAqXXnVAWazgic7DatyY9iR0NtDSu5TWwIsU9nqftCm53mxfIwn1pU x0VSMHLEjsLolNPZEUnmEOgYfwuFSb/7HdDWENRZQG1YNUho1f3iw7WrQQGOBgE+pO4dNu+pJ2d M7DHEzDMXrw/BP9Nh4b17Dq1YAFIsuTFlEAS1/udns+Mis8ml1mtscaLOr+73Q7QkajGpiF4xJ0 G81F+phlfndRV6/A3jDn1vC89H6HPByePOjnxicNyaMMf4XxhBs4DUg85Jw1JFybaKoTjA7MBgV zZsIUDy/HX7A0zAICm54SmBDOqtq5ftmEXYl6PVQcD+yTn0y3s+RMSOaQmbivQJ44DGQqPqS53B y X-Received: by 2002:a05:600c:46d4:b0:43d:172:50b1 with SMTP id 5b1f17b1804b1-43d50a3c727mr21485985e9.29.1742557035824; Fri, 21 Mar 2025 04:37:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG8jWRwes7cQo0FozbXH73O1PRogEZobnhjyiHSnZdwP0RxfnyF5j8N2/ON0F3RDDPu3SAvoQ== X-Received: by 2002:a05:600c:46d4:b0:43d:172:50b1 with SMTP id 5b1f17b1804b1-43d50a3c727mr21485595e9.29.1742557035319; Fri, 21 Mar 2025 04:37:15 -0700 (PDT) Received: from localhost (p200300cbc72a910023d23800cdcc90f0.dip0.t-ipconnect.de. [2003:cb:c72a:9100:23d2:3800:cdcc:90f0]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3997f9957efsm2174115f8f.14.2025.03.21.04.37.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 21 Mar 2025 04:37:14 -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 v3 0/3] kernel/events/uprobes: uprobe_write_opcode() rewrite Date: Fri, 21 Mar 2025 12:37:10 +0100 Message-ID: <20250321113713.204682-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: gzAueY-h3tYtS2T8jmychpGKOsdygUR-Nj9-LbcutCU_1742557036 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: D864E4000A X-Stat-Signature: wr4djroet37hqp1a6afbidwzbqmd3aey X-HE-Tag: 1742557038-264892 X-HE-Meta: U2FsdGVkX19gQIXraIZOeHF0SEpmfni5nc0lbEKJ+Jos7ZRSywjQir20KAOxEbbuGgVFvbGntvJDu/WHrC7DX65IMXMT95BAc5RKkZ+1Ev7lyGNVErtL6OXz8DS/BVz2dqoDnzxpj6dBpSU7QDEaqDQBIfErDA2ItA6BO6cQo6hMdAWEtn4HQ97U8I3RAH7F/slwddfpc04Xk29b9ghsXGw1n+CBhlHDfwOBot5TAh/+H5spPT8j45ZVJklEeOcRZESk8Hn15etF0imcaxNq+mmk68VvojH22a59SFsEZB+129HodXnXmqNsInrYa8rmYHfqsI82uMyAeq9diaoCwQmHbGP4AJBd67MOkJNoTw/Kd8n2GbBgyYCLC/ByeNrhI3XtDHXkVV7Wylu9oI3b7PyHS96upnB4e80eiG6e8Zc3S7M8uUnTi5mJnENbodXAPSlLcqAuFaVIHgVRiMhNYKRvy7odSk+hepN31sO4zOqiU7nm+AqHTWP9135wE0mahH0Mn/4OpA37wjvvEaZhhyMGQQzvrtFkQGFDQaCoEIzXLj86pyLOGF9BxhRNw5bunNX87CW+u+kwyPPPEtc6Gpc+zWUt9p4pXpfV4/SNzA70GiejNN8HU50plMy+Utd2Fo23xjajsSyHRE6Q9FSrSdyzmY9e+0PJ84xJmkuatfTU/5Dzrwn2/wX8J+EsO0u9PsnjxoEikawad36U7Nx2sx7jG4ATwHJDJb/sUWoQMiIGdpbJB+G0ma1xk3jrgxqlHh4bt2dpS2AFcCDoown/ONQX88lXK5ewsKNU5SwU/ytTATOFIh1v5Yy14AacrG/W6LSj/h9O06nPjcVnmsQr4wGyHLDaj72iIXUAg/VGtWnqcueD3mHP7sE6UGcL725VDvVMlmWlDWqBIglWI3lxnJPl3i7qjxX+FwVQkD4Q3I+1dzNV0mPUjcugI2klcYxLVKa00nuDbZwK3uUYzHJ owMearJf nCTPl0/yxYFCvyVg7FGZ6qdHQCbIJg+mIJrSYAbkyG8qePZ43IjLRSOaXma0Js7eT2R1qFdDukWxXPfYe3evrvjRQT0pz106U3VlNNLQvJjIUxNeAYHkaaBKKpCV44P+LkwkuSASQKf1iWoy+pSAezBYfkaYzydTZtarYYs0RUq/J+rUJ1Rencc1I0md3p/38nftvSTrpm+dmMczzVfRfuCeMBeflEbBj6FG7D+Myl2DLmgmgPeUx1qgAhYjXi1Aq9BUnvEjCZ26mTdR6j107ahTjWjCEhAv4J3p0xjyCPMHbFmixxW37ALZc8nFWrQsEGzixP9v/4z7sW041inzHkqJMGHdro1O7i/28I/IlkWJ2OS0Ure6SGqDGz7iuzBnti5rb2Hf3glst+pEIQx9rDMJjIuxe556avK94/rM5mAzVrbD1+8Hp+I0+FthGfoPCzXfwBiOpru9wZWPmQZj70At14XbyM0SxjgKIK4WunD5pHx6PdE91IMGKNzwQZl4TB0hb035F2xLjmh9jbGNky+aUx7gJuZCcLbWUWRPNrwEcNFlvDh9alvx+OkMzvWrLSuF1wCPZcVoavbgSojmKX2OIPre866KWozlrELu2a1Tz47nRJBgPwz025+eCyMWZOrIaDHlnBM4RwfstSx7k9jQHCuw+wDpAgTLlfAVt98L/atAED44qNl0pZwD4Bvce16RtSEtV6NJ2GUO+Aqx2/sFh3m64PwO65hgfcYGlozYd3pAiGpVt+QKFbVQsGJo5UU/hTVOjssEMbBBdQqyb3jJBO9YVn/gFiEwCwxYkFka+sKRZRrrYdwv6R26YeKuJbi0Znr4D9Q1hhrQdrZDEY5nAeCWUganAXOMyBMcAEMT3GLV2SvSt33QdtOfTM/ZsHXwDIy/QQ0+k6DVnuO/9EfIvgelPwryG1vXTQ/oCPczIEWUkXtLfZiSXSJXEatju32QQtQ98um0LJrEbsEyJHvxp39VL tR7CI+Xh Z4wDBBbvjm1CT7XjYJyt2onhq4HF82JArojXrzm3e3c= 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. v2 -> v3: * Fix missing folio_put() 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 | 357 +++++++++++++++++---------------- 3 files changed, 187 insertions(+), 180 deletions(-) base-commit: a150906197a12c7b0f3f5efd844443bf98453efa Acked-by: Peter Zijlstra (Intel)