Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1210870pxj; Fri, 18 Jun 2021 01:59:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwTjUIHvnfcHLa5ZX9Tht5PcZh/LIMaubcZszdpn6i2+1k+NvxNQYd/IArka+j1rLKsALrI X-Received: by 2002:a17:906:4b43:: with SMTP id j3mr7920433ejv.414.1624006768868; Fri, 18 Jun 2021 01:59:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624006768; cv=none; d=google.com; s=arc-20160816; b=gfdHX264Ys8qf9d6M6q4HMOVhOj/dZyRyxLHeQ9scANL0obTgo6UkNrEw/GET8Y85l nF3Mc/UmODc1K1VCrg+mH34yhmA8auzKGVYQxQrK7y8vqy4Tvaxijg1nwaFVy8UMlZSL ThtuqY5Tcv7P9ecJW83YmteWMcJe15okcMSjru9iveq5E20d7/pfwIhzoV4EJHt23RmJ S4+qP1/oIhVDqKBO0b4rv/FS32MjbjzdIGStRc1WSj1YV8mmohjbYRD8fDt5x81qlCOl ndkL9wLQBznVkfY3Gu993cT2LRJX5aAduBKv8Gqgd1k7I3Necv9qqTqZ4xTRrTp7CI3E 0pug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=1bsAAB+WuUteeJK/Nl22hjIEh4hO2A8ae+y4+Vf4BIE=; b=eDoOmDHvF9LAEgUKfbRmLgnPmQbdWrjB1WfuDnaxEygJCsg3qpX3bNthI2lIPD9nQX 56ftdS793b0ZomZPbxnk8vLFEXmJBoj3eYUGpQ90aZH431UGBvlUIwTawEue5mjXP2m9 EnQ4xcDKUc8HtVxQtlm5V9WkhY5B3NsvyZ/LTs+/jQe9S/QwvUrj6/urPqet+6vYbDao r8GfuuGRfpy+9GtWF2XvbRCkkdaCSO0IKGPM4w8oye7DQKAA18r0sU3PWLGgHu2Jva4R jkTVTvH/6wBRdkNM0YEXih55dTVXyPN5oLoHhHD228H4oP5d611uMjkWTTMQob/kB80D OZzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=d3VCCg+w; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s18si2174949eji.59.2021.06.18.01.59.06; Fri, 18 Jun 2021 01:59:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=d3VCCg+w; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S232492AbhFRHHr (ORCPT + 99 others); Fri, 18 Jun 2021 03:07:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:44818 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232486AbhFRHHn (ORCPT ); Fri, 18 Jun 2021 03:07:43 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B91DB61351; Fri, 18 Jun 2021 07:05:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1623999934; bh=miHpFDmx4DL40GEYK1JdPaxrsRuu26/ovjGnumdfRuU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d3VCCg+wmAT956pykeGY4cNGDqzOCTzUylcdGRRgOZFgQckbqF2FK7OGwQ79LaO2J BlOK70+bQkdDBcmUArgPaOehVBRrKShCdkqCxB2lx+hUwJPS+PRN8CAp9zADfKqxVO seUbawz9GzdhHiVCljrNCspyJaw5zsIAGASRy4vruChCiR+3rs75F7KI9rL6tp2tam 7E4zUtpQdUVCklBTDk2ygjmOWQzVarm6Mwlmp31Lw2ujK5qwo+Y1MvUWtvzNoQ8QzP +SFxsYreFmKXGvx/Xmpig6XlvRYylrzFaQ2L9nIybAwemMx/v8dW/YiFbAVqfcNLb3 lyCGSnXNTpESg== From: Masami Hiramatsu To: Steven Rostedt , Josh Poimboeuf , Ingo Molnar Cc: X86 ML , Masami Hiramatsu , Daniel Xu , linux-kernel@vger.kernel.org, bpf@vger.kernel.org, kuba@kernel.org, mingo@redhat.com, ast@kernel.org, Thomas Gleixner , Borislav Petkov , Peter Zijlstra , kernel-team@fb.com, yhs@fb.com, linux-ia64@vger.kernel.org, Abhishek Sagar , Andrii Nakryiko Subject: [PATCH -tip v8 01/13] ia64: kprobes: Fix to pass correct trampoline address to the handler Date: Fri, 18 Jun 2021 16:05:31 +0900 Message-Id: <162399993125.506599.11062077324255866677.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <162399992186.506599.8457763707951687195.stgit@devnote2> References: <162399992186.506599.8457763707951687195.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit e792ff804f49 ("ia64: kprobes: Use generic kretprobe trampoline handler") missed to pass the wrong trampoline address (it passes the descriptor address instead of function entry address). This fixes it to pass correct trampoline address to __kretprobe_trampoline_handler(). This also changes to use correct symbol dereference function to get the function address from the kretprobe_trampoline. Fixes: e792ff804f49 ("ia64: kprobes: Use generic kretprobe trampoline handler") Signed-off-by: Masami Hiramatsu --- Changes in v5: - Fix a compile error typo. --- arch/ia64/kernel/kprobes.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c index 441ed04b1037..d4048518a1d7 100644 --- a/arch/ia64/kernel/kprobes.c +++ b/arch/ia64/kernel/kprobes.c @@ -398,7 +398,8 @@ static void kretprobe_trampoline(void) int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) { - regs->cr_iip = __kretprobe_trampoline_handler(regs, kretprobe_trampoline, NULL); + regs->cr_iip = __kretprobe_trampoline_handler(regs, + dereference_function_descriptor(kretprobe_trampoline), NULL); /* * By returning a non-zero value, we are telling * kprobe_handler() that we don't want the post_handler @@ -414,7 +415,7 @@ void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri, ri->fp = NULL; /* Replace the return addr with trampoline addr */ - regs->b0 = ((struct fnptr *)kretprobe_trampoline)->ip; + regs->b0 = (unsigned long)dereference_function_descriptor(kretprobe_trampoline); } /* Check the instruction in the slot is break */ @@ -902,14 +903,14 @@ static struct kprobe trampoline_p = { int __init arch_init_kprobes(void) { trampoline_p.addr = - (kprobe_opcode_t *)((struct fnptr *)kretprobe_trampoline)->ip; + dereference_function_descriptor(kretprobe_trampoline); return register_kprobe(&trampoline_p); } int __kprobes arch_trampoline_kprobe(struct kprobe *p) { if (p->addr == - (kprobe_opcode_t *)((struct fnptr *)kretprobe_trampoline)->ip) + dereference_function_descriptor(kretprobe_trampoline)) return 1; return 0;