Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp2788646imw; Sun, 17 Jul 2022 17:15:51 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tAyODhEChddJtnMH96Y/YKFvcV8tUUGkyzpz91SPA0oB7yNui+WGkzv9up/M0omfIcRr/F X-Received: by 2002:a05:6402:3511:b0:43a:caf7:6fce with SMTP id b17-20020a056402351100b0043acaf76fcemr34309498edd.349.1658103351752; Sun, 17 Jul 2022 17:15:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658103351; cv=none; d=google.com; s=arc-20160816; b=jRKt0trQKRUZ86vq86UqghsI52as3VTHOxBHZX1uEKtgsY87h7DxJjJuiFaERdul14 Q2RHk0OBjE4pC6xrcMGvGcBobO6ovhnLNKO2/2cdnFu7gXgEFgG2uHxidkxSFhNi53bA v8uXtRAB9K92XV8LuhYu/9mDRNARe3wZErwKddZuOjimCX0m46wDme7pBK/IU8DTfLuG Dqxr7yqTQUJKsz7NN0XWovUAkkyt3sYfy5u/uc5O3wY36amg96RVqSUwkryTEugE3KWv 2fs28vim3UNq6t0D7JHEXvn9GnkBhwIt+/+A6SfZClK7Gk7wfZsDSBkms/hiOx+RM/9l mn5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :message-id:date:subject:cc:to:from; bh=4A/fG8zet48BAv1TTZaYHb1CXs61ncN4e/8GOmiJr7o=; b=ibNOKAt+dPrReA/KF9jCcks3l7/cG/09rK3irhrXDOI9psA2Es3P7iWH9QARav3E93 zVn3pgYq32cnE9lYA9ebOetUovOaFC+GUKJ6PNTjBBkq/lu1sIAqUrR6hWoaXBHECodB fSFo6PlZRZAeJMOA1U+JItSrnOu9IqKHG2L0W7tjvdUVvVekQ9S9pJ491UrF2Wd8MqMI ZDLkTyTElMksSO9rvek/KvFiQLTPGE5HXdRWwHyMj0wlt57IxVDzeVSE3kiLQ41GVc0D lDQw8zIuKYTVwW0+sa1GbCMiwzrZlxUnGS5ghZ0AvchWm3vP/1yjrsimEMhrXcn6ybj+ wThQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z10-20020a50eb4a000000b0043b0a9cf8bfsi6887757edp.490.2022.07.17.17.15.27; Sun, 17 Jul 2022 17:15:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231346AbiGRAOa convert rfc822-to-8bit (ORCPT + 99 others); Sun, 17 Jul 2022 20:14:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229535AbiGRAO3 (ORCPT ); Sun, 17 Jul 2022 20:14:29 -0400 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ABB9963B0 for ; Sun, 17 Jul 2022 17:14:28 -0700 (PDT) Received: from pps.filterd (m0044010.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26I0E13L026860 for ; Sun, 17 Jul 2022 17:14:28 -0700 Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3hbrnqe1fh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sun, 17 Jul 2022 17:14:28 -0700 Received: from twshared10560.18.frc3.facebook.com (2620:10d:c085:108::8) by mail.thefacebook.com (2620:10d:c085:21d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Sun, 17 Jul 2022 17:14:27 -0700 Received: by devbig932.frc1.facebook.com (Postfix, from userid 4523) id 7B084A495CE3; Sun, 17 Jul 2022 17:14:17 -0700 (PDT) From: Song Liu To: , , CC: , , , , Song Liu Subject: [PATCH v3 bpf-next 0/4] ftrace: host klp and bpf trampoline together Date: Sun, 17 Jul 2022 17:14:01 -0700 Message-ID: <20220718001405.2236811-1-song@kernel.org> X-Mailer: git-send-email 2.30.2 X-FB-Internal: Safe Content-Type: text/plain X-Proofpoint-GUID: feb_L9yp3F5eYCKlmFl_hRC_OEHZtPOv X-Proofpoint-ORIG-GUID: feb_L9yp3F5eYCKlmFl_hRC_OEHZtPOv Content-Transfer-Encoding: 8BIT X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-17_17,2022-07-15_01,2022-06-22_01 X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Changes v2 => v3: 1. Major rewrite after discussions with Steven Rostedt. [1] 2. Remove SHARE_IPMODIFY flag from ftrace code. Instead use the callback function to communicate this information. (Steven) 3. Add cleanup_direct_functions_after_ipmodify() to clear SHARE_IPMODIFY on the DIRECT ops when the IPMODIFY ops is removed. Changes v1 => v2: 1. Fix build errors for different config. (kernel test robot) Kernel Live Patch (livepatch, or klp) and bpf trampoline are important features for modern systems. This set allows the two to work on the same kernel function as the same time. live patch uses ftrace with IPMODIFY, while bpf trampoline use direct ftrace. Existing policy does not allow the two to attach to the same kernel function. This is changed by fine tuning ftrace IPMODIFY policy, and allows one IPMODIFY ftrace_ops and one DIRECT ftrace_ops on the same kernel function at the same time. Please see patch 2 and 4 for more details. Note that, one of the constraint here is to let bpf trampoline use direct call when it is not working on the same function as live patch. This is achieved by allowing ftrace code to ask bpf trampoline to make changes. [1] https://lore.kernel.org/all/20220602193706.2607681-2-song@kernel.org/ Jiri Olsa (1): bpf, x64: Allow to use caller address from stack Song Liu (3): ftrace: add modify_ftrace_direct_multi_nolock ftrace: allow IPMODIFY and DIRECT ops on the same function bpf: support bpf_trampoline on functions with IPMODIFY (e.g. livepatch) arch/x86/net/bpf_jit_comp.c | 13 +- include/linux/bpf.h | 13 ++ include/linux/ftrace.h | 43 ++++++ kernel/bpf/trampoline.c | 158 +++++++++++++++++--- kernel/trace/ftrace.c | 288 +++++++++++++++++++++++++++++++----- 5 files changed, 455 insertions(+), 60 deletions(-) -- 2.30.2