From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752739AbcERCZL (ORCPT ); Tue, 17 May 2016 22:25:11 -0400 Received: from eu-smtp-delivery-143.mimecast.com ([146.101.78.143]:39263 "EHLO eu-smtp-delivery-143.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752440AbcERCZI convert rfc822-to-8bit (ORCPT ); Tue, 17 May 2016 22:25:08 -0400 Date: Wed, 18 May 2016 10:24:18 +0800 From: Huang Shijie To: Li Bin CC: James Morse , David Long , Mark Rutland , Feng Kan , Catalin Marinas , Will Deacon , Yang Shi , John Blackwood , Pratyush Anand , Viresh Kumar , Zi Shen Lim , Dave P Martin , Petr Mladek , Vladimir Murzin , Steve Capper , Kees Cook , "Suzuki K. Poulose" , Marc Zyngier , Mark Brown , Sandeepa Prabhu , William Cohen , Alex =?iso-8859-1?Q?Benn=E9e?= , , Ard Biesheuvel , Greg Kroah-Hartman , , Mark Salyzyn , Christoffer Dall , Andrew Morton , Robin Murphy , Jens Wiklander , Balamurugan Shanmugam , Subject: Re: [PATCH v12 00/10] arm64: Add kernel probes (kprobes) support Message-ID: <20160518022416.GA27271@sha-win-210.asiapac.arm.com> References: <1461783185-9056-1-git-send-email-dave.long@linaro.org> <573350B2.4010701@arm.com> <5733E9E0.1060504@huawei.com> MIME-Version: 1.0 In-Reply-To: <5733E9E0.1060504@huawei.com> User-Agent: Mutt/1.6.0 (2016-04-01) X-Originating-IP: [101.230.208.200] X-ClientProxiedBy: OS1PR01CA0027.jpnprd01.prod.outlook.com (10.164.162.9) To HE1PR08MB0507.eurprd08.prod.outlook.com (10.161.120.154) X-MS-Office365-Filtering-Correlation-Id: 01c74d1c-7ed4-4216-0ab1-08d37ec39cc2 X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0507;2:js3NZ9I34IM5BdtwO7nUWNVmQ6ZhVBG3vwFp3NHNpsaAvkmG32UV4JQk+WK4KWHYSbCSkVa4+mXqP0Xgfp5aLRPGfpYEiYTc5eVm+SlemqUMO8yWvnym4Ibuaaa13qh7pyfzB26TEj9fliYddcDLvorPg5/MKuhzBYPcoPREwvatxFt4C3lXnzegGVfi4O60;3:P1rMi1iq/B3ZyC7g3fgAHetCnX7mQK96IX1xdtUe2ydjP7XtDoCvCHvCMr4aVy9io0UE9ZW4WMOZx0Iei/JPqqn3DL8VOUdVjCLOqzJnmb+oZCjySuc5Ys30Lf80mynS X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR08MB0507; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0507;25:Jgpdle+j0gOubX8HSK3/2PvUC5j67KKJhP0yuyIpCpFuWNGE+lTh8OQD0Decst+pDlGLu4teQGhmB1G++U9dLNnYCdVn3Lmo9wlijFGVGwgXQ+qHmtjSjrrlbt3deZkM+KLvq3sJ0/YJFpkWj9BmftFCKv7DPsSLcwBoRmI9BDED+/iGm1jjxbJ9BhPZSkGMdReQVK24Y2ZwIN++oLoK5Sk77UN7JmAgAbX92F3KHKigUti5m+BY5+El/pZf9Y2Y3PcWouIofMUsRyMzTLbPQTe1veCsqwtuMZCapDqLF135dqj76km4OdZQQecGho9M+xB+vSvStkJKrpF8XGZgUHsF7hMftpzdCZpPTv6P/PqHYqMXut7bVQwBycVPsVrslHtgTYF6k2Eln9P2iWDMVIc86Rx56+FHMRIR8fX+IdROdaWCCyC5+MkL9fuS88jjQX6ng5xGLyshVv/nXI88czNh82/SzNkbkiE3bwMrBvVZa0GLp+OO9NXRi5IhQ4f28pgmwd+PY0zGQXwBJXuBeK3xLcIsy+9q49a7ACtHhV7jC2dASioMSiLCBIhSfNoJhmkRJgMTgXWDW3+EqgZcjp/fRjEZQtev5FGbz3CVWmy96p425oNA/x3/dQZIHoEGR4EWnWen2YrGN9RTkP3LaUGCOFXZKtBqHAeQ1agc95yRo2siOaP8KZnc3/ai15Ya/X6IE0s2Tw/oRY6eyC4MCw==;20:KqjtAMVW8VlhKhmKWm7GcZOFP3Ra8FYpTQS7JYdqT1W64MEOo2jsLsQXWjgX3PeVkqS9bR2/WY3Lb1fJACLa9uJOPcV8N/AZ9c2pB/X8mgVOyLlSsEMjB0rXiRbQx+IY9gpwqFnBc2DpriUyskZdasKLrIO3fiocegYUVF8m8kk= NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:HE1PR08MB0507;BCL:0;PCL:0;RULEID:;SRVR:HE1PR08MB0507; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0507;4:8jRQk6u1ntDk6XgY/1SQnpuXj64qZt76DCfgyLNjfpNfBrMRMN45AK+LwRdV4WxRL2KT8KOv1sfVwYrkclaw302iSJspLN2xwDPYvPdEGWgurL6/IIBPq8Bqj6FUxu1WXSYv8nl1k9O6pr1d5+56o04DEVBF4Ek6J8pE3SzRuUG3Q1jMLHUuLRAT305EUjWgISTz309D78Klmnzwh7s2lOPyZNqTLgMZ9iF3HWbbnKkg4ZJnw8e3qiZynyFYCVHZn3MHTSOaV8lHNaXmbXdzNmkJIShaHZoOC2tIbnSDWDiZyC44mCJ4+5EQ10mtewfwsoTiC/wpniDF4GmyhKvr4giELVnqQSuwrh8/HSB02v1tuWuQwNOF5JHBTkrBvu7L15FOGQEI4H8G3zbgLVpKaQ== X-Forefront-PRVS: 0946DC87A1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(24454002)(4001350100001)(42186005)(189998001)(19580395003)(19580405001)(46406003)(2950100001)(33656002)(83506001)(77096005)(97756001)(54356999)(50986999)(8676002)(4326007)(1076002)(23726003)(110136002)(76176999)(5004730100002)(81166006)(5008740100001)(86362001)(575784001)(6116002)(2906002)(92566002)(3846002)(586003)(47776003)(66066001);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR08MB0507;H:sha-win-210.asiapac.arm.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0507;23:JvKZkwEwDjx/QDvsMrBkFCCeWITBN72s3/sFv2fDCTiz1X7l875Ln12yf7Jaa0ZvTzSCz0B/wgzKgZB19umajFnYsGPklSlyDVUJ1s5VgE2okDd1CNXnqPF7JmRqkf2gaUx2htHlbIhLiDiuc+XDg6y/IQ8x3OCI6CU5fi4hw+r5/9pW4JrOLjm/+ZZGRNX82k9UKgRUcUfKOjrcyoVdNKwyYUyNRfteMK+aYN6ym1H0iMGGsvtma3kDZWHIJzFy6VS9BcuFWAQ5JLFdSqySJeqbkuHP6z7q8sQh2f1J2obzo5sQ0ToZHqarqpv6f5lIFmp8WBCE3VSBxNwW2P7y/1ry0z6GLhPUNxAv7O/++ywTFGuZRik+m3sp6RcqxtLLt3PEHSmK7rq7AqO81dCUShNS9zy89HhkPCOCDWAwb5pQKBP/15ZTD2nTs0hgniV3Il+JxcQOEE2Hh8YfLHX2NCrtHgiDIx788pVYr4OQqNR83ejuhsJr9TF/3GzCma2NgXVjzcNK8tlmhv3Cpf3xR+Kau97Z0bKfXf/j2mhyaYmmnoHZrTmyTh1ayC+qX0tpAWzeVbILui2YZUMhLatTBmyXysLEdi/tjmWvzZpfgN7ie2FYfBKV6h84kx8kRiGU0yUIXSsxNBGkjsmxZkD08hv2OQCa21BiEMO6aCNHnF45k+BklTh/yxc1DkwRwruIMLfg70atIaNrlto/x7i2rXl/7H1MJiHMlhZ1YXNEZNsZQGLNh82uHPp6HTFLRpHJBFHKC8J7Xo5EMyArM1ZMuE0ODAvTzX2amHmNoTxRkaDb8eYNA5Fku8lQ76JfWSPu0imJofozo8qLaJrWxhPTqY9zeni4Ph+T3Owv4F3BHUO1OJcB523bVqzyk+J/M5VQc36OTWeazV6rolM97bnWwSHeaEaedbyOolhHkAmFThQ= X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0507;5:56b2E+Q+S52dapFaddGh9mmqjq3URC2n53e8Pa8Xz8az87Y2Jvs8RrHr2pqBkPP0FjH2NH/BZGX6vWL2cVnOcQD3VFOs80ibvw08JOHvMebAPb4fmbzBOt+5xxO9w0Gd5eoe+9parocUklNkKsRckQ==;24:O7E9zeoAEA6kTb5ynLlWqjIVQo9FotkZDaneyBKuzQGCMKhhwxEKrmvRr96UTmuD/K691dWrGWiVZsNskIIdqhK87fCeuXkLQNXAEWznwNA=;7:4LiX7lbGWLsNqbuyXUe+l0em1J7LJOAkE8QA6SXRvpb9165dftYun2Qwd7qAbeXftkwwjd0Vs7fR6Fa9C9+l18og2HxeK7yDERKp6XDu4as+wsGFmTjkYujIFFKr8hEp71Mb3HmC24CgMfqx8B6U17Bqwkv+Fdt/D8prcHdkseyfnUpLGVABfcbP3syc18o1;20:38xjwPzlEqDBorhAfPHi7vEDWwtwbr82526fQPc198m88ZPKWJvYVCwpWWikjTjaXelCNdYKei3ACzfD1bO/xrrMEXoN8Spy+S2Vz/y539tsAiXMyqdOfPluE/N59UGsNXfKHG1MfwfOmJ5ow3y8y+97cJ1k7M+ct0L14nn6vkY= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2016 02:24:46.2431 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB0507 X-MC-Unique: ls2ECw9iTK2_qqqS3WaWfA-1 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: 8BIT Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 12, 2016 at 10:26:40AM +0800, Li Bin wrote: > > > on 2016/5/11 23:33, James Morse wrote: > > Hi David, > > > > On 27/04/16 19:52, David Long wrote: > >> From: "David A. Long" > >> > >> This patchset is heavily based on Sandeepa Prabhu's ARM v8 kprobes patches, > >> first seen in October 2013. This version attempts to address concerns raised by > >> reviewers and also fixes problems discovered during testing. > >> > >> This patchset adds support for kernel probes(kprobes), jump probes(jprobes) > >> and return probes(kretprobes) support for ARM64. > >> > >> The kprobes mechanism makes use of software breakpoint and single stepping > >> support available in the ARM v8 kernel. > > > > I applied this series on v4.6-rc7, and built the sample kprobes. They work fine, > > unless I throw ftrace into the mix too. > > > > I enabled the function_graph tracer, then tried to load the jprobe example module: > > -------------------------%<------------------------- > > root@ubuntu:/sys/kernel/debug/tracing# insmod /root/jprobe_example.ko > > Planted jprobe at ffffff80080c8f20, handler addr ffffff8000bb3000 > > root@ubuntu:/sys/kernel/debug/tracing# jprobe: clone_flags = 0x1200011, stack_st > > art = 0x0 stack_size = 0x0 > > Bad mode in Synchronous Abort handler detected, code 0x86000005 -- IABT (current > > EL) > > CPU: 5 PID: 1047 Comm: systemd-udevd Not tainted 4.6.0-rc7+ #4064 > > Hardware name: ARM Juno development board (r1) (DT) > > task: ffffffc975948300 ti: ffffffc974e4c000 task.ti: ffffffc974e4c000 > > PC is at 0x0 > > LR is at 0x0 > > > > pc : [<0000000000000000>] lr : [<0000000000000000>] pstate: 60000145 > > sp : ffffffc974e4ff00 > > x29: 0000000001200011 x28: ffffffc974e4c000 > > x27: ffffff80088d0000 x26: 00000000000000dc > > x25: 0000000000000120 x24: 0000000000000015 > > x23: 0000000060000000 x22: 0000007fa1b40e60 > > x21: 0000007fa1ce70d0 x20: 0000000000000000 > > x19: 0000000000000000 x18: 0000000000000a03 > > x17: 0000007fa1b40d90 x16: ffffff80080c9708 > > x15: 003b9aca00000000 x14: 0000007fddb7e5c0 > > x13: 0000007fa1b40e2c x12: 0000000000d00ff0 > > x11: ffffff8009c4d000 x10: ffffff800920c000 > > x9 : ffffff8008f5c000 x8 : ffffffc976c06800 > > x7 : 000000000006daf2 x6 : 0000000000000015 > > x5 : 0000000000000004 x4 : ffffffc96e8690a0 > > x3 : 0000001ed7cbab74 x2 : ffffffc96e869000 > > x1 : 0000000000000000 x0 : 0000000000000000 > > > > Internal error: Oops - bad mode: 0 [#1] PREEMPT SMP > > Modules linked in: jprobe_example > > CPU: 5 PID: 1047 Comm: systemd-udevd Not tainted 4.6.0-rc7+ #4064 > > Hardware name: ARM Juno development board (r1) (DT) > > task: ffffffc975948300 ti: ffffffc974e4c000 task.ti: ffffffc974e4c000 > > PC is at 0x0 > > LR is at 0x0 > > > > pc : [<0000000000000000>] lr : [<0000000000000000>] pstate: 60000145 > > sp : ffffffc974e4ff00 > > x29: 0000000001200011 x28: ffffffc974e4c000 > > x27: ffffff80088d0000 x26: 00000000000000dc > > x25: 0000000000000120 x24: 0000000000000015 > > x23: 0000000060000000 x22: 0000007fa1b40e60 > > x21: 0000007fa1ce70d0 x20: 0000000000000000 > > x19: 0000000000000000 x18: 0000000000000a03 > > x17: 0000007fa1b40d90 x16: ffffff80080c9708 > > x15: 003b9aca00000000 x14: 0000007fddb7e5c0 > > x13: 0000007fa1b40e2c x12: 0000000000d00ff0 > > x11: ffffff8009c4d000 x10: ffffff800920c000 > > x9 : ffffff8008f5c000 x8 : ffffffc976c06800 > > x7 : 000000000006daf2 x6 : 0000000000000015 > > x5 : 0000000000000004 x4 : ffffffc96e8690a0 > > x3 : 0000001ed7cbab74 x2 : ffffffc96e869000 > > x1 : 0000000000000000 x0 : 0000000000000000 > > > > Process systemd-udevd (pid: 1047, stack limit = 0xffffffc974e4c020) > > Stack: (0xffffffc974e4ff00 to 0xffffffc974e50000) > > ff00: 0000000000000417 0000007fa1ce76f0 00000000000000dc 0000000000000417 > > ff20: 00000000ffffffff 0000007fddb7ecf8 0000000000000005 ffffffffffffffff > > ff40: 00000000ff000001 003b9aca00000000 000000555b3868b0 0000007fa1b40d90 > > ff60: 0000000000000a03 0000007fddb7e5c0 0000000000000000 0000007fddb7e5e0 > > ff80: 000000555b358000 000000558f56f0e0 0000000000000000 000000558f574f00 > > ffa0: 000000558f574f00 00000000000004fa 000000558f56f010 0000007fddb7e600 > > ffc0: 0000007fa1b40e2c 0000007fddb7e5c0 0000007fa1b40e60 0000000060000000 > > ffe0: 0000000001200011 00000000000000dc 0004000084000200 0800000002000000 > > Call trace: > > [< (null)>] (null) > > Code: bad PC value > > ---[ end trace 35d24aad799c2941 ]--- > > -------------------------%<------------------------- > > > > To solve this, it should pause function tracing before the jprobe handler is called > and unpause it before it returns back to the function it probed. > > diff --git a/arch/arm64/kernel/kprobes.c b/arch/arm64/kernel/kprobes.c > index db2d95c..b21ed00 100644 > --- a/arch/arm64/kernel/kprobes.c > +++ b/arch/arm64/kernel/kprobes.c > @@ -714,6 +714,7 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) > > instruction_pointer_set(regs, (long)jp->entry); > preempt_disable(); > + pause_graph_tracing(); > return 1; > } > > @@ -757,6 +758,7 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) > show_regs(regs); > BUG(); > } > + unpause_graph_tracing(); > *regs = kcb->jprobe_saved_regs; > memcpy((void *)stack_addr, kcb->jprobes_stack, > MIN_STACK_SIZE(stack_addr)); > > I tested this fix, it works. thanks Huang Shijie