From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 616B9C35FF3 for ; Sat, 15 Mar 2025 23:04:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=H0iQpl+Wki8Uj9+MocJTn+ssGXwRd5V7LBD6/Q7fjpo=; b=HVzTa3mJPRrRfvZcpPdD8KAkCp DfPoFdnkfTI2UhzAWTzh5C0Jx3Yc/2T+9ufNc22tg+IRU85ZIcYk7l/upydcNt2HO5aBQQAgHSQGk JKb+1rR+SfkFDnqX2NCJCvzF5S1eOYiEBGLwdQJHLpzKmOL2of+aXEmVQpnrJ28nT5m5MSP6pIHJJ Hk3kJAkI61s7jyzxFq/dxfftWaOd2INdXkIEPMg371nlc5x5lhcb37uuQL6OHR6xePPcqtLy/Bqn3 uteTjJN2R1c8RGp3ztjAxY6I6NMZSTY3f68Z3v8wKM2m0LkDLo0gIRJlTMGBj/baljt3YiC5xmKbc 3Q7GG5Kw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1ttaYK-0000000Gwq4-0Nzg; Sat, 15 Mar 2025 23:04:24 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1ttaWd-0000000Gwh6-3oHJ; Sat, 15 Mar 2025 23:02:41 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id C61F05C1EE6; Sat, 15 Mar 2025 23:00:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 21B62C4CEE5; Sat, 15 Mar 2025 23:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742079758; bh=8XxuyM3rSXd31IYIv534Hq8h4Bllxjj9SAfhpY0z5zA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Bj7Di1njZVjpy/0Z52Tb50Gk3d6lh4HTnDSUTCsGBYIs1wS6mKBiWq96kFuJUFw0p yGblIEs1YuxFZkW0isR0z6Lgu4m0+XyYM639dyGvwzvVXGz80ny3yPAARlcpESzzen P+RKfVlW2Qn/filHuFtMeg/2MjgfFso2dpnrf+gjwVij0yrwBlHbvVsIpW1ISpdA/j iUfazW87RiSB3UEpLWUqTesR2F7UlQGQwbYbs8pxQB65L5ofbeukzbnVOY9ni7PARm ZgQ0SHiOT1cLht/iB3jbrcQJNWvo46UoNo/uoUHeiJBkDYeda+WoxQFqjy2GIdE8Iq GGQjIIks1wvEA== Date: Sat, 15 Mar 2025 16:02:35 -0700 From: Namhyung Kim To: Arnaldo Carvalho de Melo Cc: Ian Rogers , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , guoren , Paul Walmsley , Palmer Dabbelt , Albert Ou , Charlie Jenkins , Bibo Mao , Huacai Chen , Catalin Marinas , Jiri Slaby , =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, "linux-csky@vger.kernel.org" , linux-riscv@lists.infradead.org, Arnd Bergmann Subject: Re: [PATCH v5 00/11] perf: Support multiple system call tables in the build Message-ID: References: <20250308003209.234114-1-irogers@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250315_160240_045178_B34C5325 X-CRM114-Status: GOOD ( 28.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Mar 14, 2025 at 05:48:12PM -0300, Arnaldo Carvalho de Melo wrote: > On Fri, Mar 14, 2025 at 02:26:41PM -0300, Arnaldo Carvalho de Melo wrote: > > it finds the pair, but then its sc->args has a bogus pointer... I'll see > > where this isn't being initialized... > > Breakpoint 4, trace__find_usable_bpf_prog_entry (trace=0x7fffffffa510, sc=0x1046f10) at builtin-trace.c:3874 > 3874 bool is_candidate = false; > (gdb) n > 3876 if (pair == NULL || pair == sc || > (gdb) p pair > $7 = (struct syscall *) 0x1083c50 > (gdb) p pair->name > $8 = 0x81478e "accept4" > (gdb) n > 3877 pair->bpf_prog.sys_enter == trace->skel->progs.syscall_unaugmented) > (gdb) p i > $9 = 1 > (gdb) n > 3876 if (pair == NULL || pair == sc || > (gdb) n > 3880 printf("sc=%p\n", sc); fflush(stdout); > (gdb) n > sc=0x1046f10 > 3881 printf("sc->name=%p\n", sc->name); fflush(stdout); > (gdb) n > sc->name=0x6c66202c786c3830 > 3882 printf("sc->nr_args=%d, sc->args=%p\n", sc->nr_args, sc->args); fflush(stdout); > (gdb) p sc->nr_args > $10 = 1935635045 > (gdb) p sc->args > $11 = (struct tep_format_field *) 0x257830203a6e656c > (gdb) p *sc > $12 = {e_machine = 540697702, id = 807761968, tp_format = 0x657075202c786c38, nr_args = 1935635045, args_size = 1634427759, bpf_prog = {sys_enter = 0x257830203a726464, > sys_exit = 0x7075202c786c3830}, is_exit = 101, is_open = 101, nonexistent = 114, use_btf = 95, args = 0x257830203a6e656c, > name = 0x6c66202c786c3830 , fmt = 0x257830203a736761, arg_fmt = 0x786c3830} > (gdb) > > Ok, ran out of time, but if I simple avoid the second loop in: > > static int trace__init_syscalls_bpf_prog_array_maps(struct trace *trace, int e_machine) > > > I.e. the one that starts with: > > /* > * Now lets do a second pass looking for enabled syscalls without > * an augmenter that have a signature that is a superset of another > * syscall with an augmenter so that we can auto-reuse it. > > This: > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > index e0434f7dc67cb988..3664bb512c70cabf 100644 > --- a/tools/perf/builtin-trace.c > +++ b/tools/perf/builtin-trace.c > @@ -3989,6 +3989,8 @@ static int trace__init_syscalls_bpf_prog_array_maps(struct trace *trace, int e_m > goto out; > } > > + return 0; > + > /* > * Now lets do a second pass looking for enabled syscalls without > * an augmenter that have a signature that is a superset of another > ⬢ [acme@toolbox perf-tools-next]$ > > > Then all works, we don't reuse any BPF program, but then that is an > heuristic anyway, that is tried becuase landlock_add_rule has a pointer > argument: > > root@number:~# perf trace -e landlock_add_rule perf test -w landlock > 0.000 ( 0.003 ms): perf/71034 landlock_add_rule(ruleset_fd: 11, rule_type: LANDLOCK_RULE_PATH_BENEATH, rule_attr: 0x7fff6f2bb550, flags: 45) = -1 EINVAL (Invalid argument) > 0.004 ( 0.001 ms): perf/71034 landlock_add_rule(ruleset_fd: 11, rule_type: LANDLOCK_RULE_NET_PORT, rule_attr: 0x7fff6f2bb540, flags: 45) = -1 EINVAL (Invalid argument) > root@number:~# perf test enum > 105: perf trace enum augmentation tests : Ok > root@number:~# > > So its some sort of syncronization on the various new tables, sorted by > name, etc that then when iterating over the syscalls ends up using a sc > that is not initialized. Right, I've realized that calling trace__syscall_info() can invalidate the existing sc since it calls trace__find_syscall() which reallocates and resorts the syscall table. That's why it was ok when no filter was used since it'd allocate the whole table in the first pass. Otherwise it looks for a pair syscall while holding the original sc but calling the function would invalidate the sc. What about this (on top of my earlier fix)? Thanks, Namhyung ---8<--- diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 49199d753b7cafbf..da0ddc713e6b35da 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2506,10 +2506,12 @@ static struct syscall *trace__find_syscall(struct trace *trace, int e_machine, i }; struct syscall *sc, *tmp; - sc = bsearch(&key, trace->syscalls.table, trace->syscalls.table_size, - sizeof(struct syscall), syscall__cmp); - if (sc) - return sc; + if (trace->syscalls.table) { + sc = bsearch(&key, trace->syscalls.table, trace->syscalls.table_size, + sizeof(struct syscall), syscall__cmp); + if (sc) + return sc; + } tmp = reallocarray(trace->syscalls.table, trace->syscalls.table_size + 1, sizeof(struct syscall)); @@ -3855,6 +3857,10 @@ static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int e_machine, i static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace, struct syscall *sc) { + int orig_id = sc->id; + const char *orig_name = sc->name; + int e_machine = sc->e_machine; + struct tep_format_field *args = sc->args; struct tep_format_field *field, *candidate_field; /* * We're only interested in syscalls that have a pointer: @@ -3866,18 +3872,19 @@ static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace return NULL; + /* calling trace__syscall_info() may invalidate 'sc' */ try_to_find_pair: - for (int i = 0, num_idx = syscalltbl__num_idx(sc->e_machine); i < num_idx; ++i) { - int id = syscalltbl__id_at_idx(sc->e_machine, i); - struct syscall *pair = trace__syscall_info(trace, NULL, sc->e_machine, id); + for (int i = 0, num_idx = syscalltbl__num_idx(e_machine); i < num_idx; ++i) { + int id = syscalltbl__id_at_idx(e_machine, i); + struct syscall *pair = trace__syscall_info(trace, NULL, e_machine, id); struct bpf_program *pair_prog; bool is_candidate = false; - if (pair == NULL || pair == sc || + if (pair == NULL || pair->id == orig_id || pair->bpf_prog.sys_enter == trace->skel->progs.syscall_unaugmented) continue; - for (field = sc->args, candidate_field = pair->args; + for (field = args, candidate_field = pair->args; field && candidate_field; field = field->next, candidate_field = candidate_field->next) { bool is_pointer = field->flags & TEP_FIELD_IS_POINTER, candidate_is_pointer = candidate_field->flags & TEP_FIELD_IS_POINTER; @@ -3944,7 +3951,7 @@ static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace goto next_candidate; } - pr_debug("Reusing \"%s\" BPF sys_enter augmenter for \"%s\"\n", pair->name, sc->name); + pr_debug("Reusing \"%s\" BPF sys_enter augmenter for \"%s\"\n", pair->name, orig_name); return pair_prog; next_candidate: continue; @@ -4041,6 +4048,11 @@ static int trace__init_syscalls_bpf_prog_array_maps(struct trace *trace, int e_m if (pair_prog == NULL) continue; + /* + * Get syscall info again as find usable entry above might + * modify the syscall table and shuffle it. + */ + sc = trace__syscall_info(trace, NULL, e_machine, key); sc->bpf_prog.sys_enter = pair_prog; /* From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B7965C28B28 for ; Sat, 15 Mar 2025 23:04:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=T3D2AIc2ZL/toiU6j3/U8STrBhIqoz33PLCUmswaC7c=; b=bUK5Ot54AWq9Zo zx2XlhJPMQcmEUVo/6MhvOVs7GB/DOTgm9HInqMNoWqKrboa82K2IRlz/VUYgQ2a9L+FSGziJt6KB g3nfHDX2njmE62rRGO+oncRsMMtKRItfq5kJUIB67KY/KVG7/HD/hTSpzrybAnXhLMLKgDjmx2DmY H7tIpy+5lQiVmMv6ond4U7WFx3QtONmcGuXKZgFoLZC0eGHa3MC/VLamVlHTUxRKBO3TMHEGl9hEa HEwRtZr8aa0I2Duf2Y+tGKw7P4ozHywsuu+NXsktloC96qJaXuzrsdhHEkEjAI3AfkZIYOL9AjtLI oHvUi11yMaMx39+7kGSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1ttaYK-0000000Gwq9-2f16; Sat, 15 Mar 2025 23:04:24 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1ttaWd-0000000Gwh6-3oHJ; Sat, 15 Mar 2025 23:02:41 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id C61F05C1EE6; Sat, 15 Mar 2025 23:00:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 21B62C4CEE5; Sat, 15 Mar 2025 23:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742079758; bh=8XxuyM3rSXd31IYIv534Hq8h4Bllxjj9SAfhpY0z5zA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Bj7Di1njZVjpy/0Z52Tb50Gk3d6lh4HTnDSUTCsGBYIs1wS6mKBiWq96kFuJUFw0p yGblIEs1YuxFZkW0isR0z6Lgu4m0+XyYM639dyGvwzvVXGz80ny3yPAARlcpESzzen P+RKfVlW2Qn/filHuFtMeg/2MjgfFso2dpnrf+gjwVij0yrwBlHbvVsIpW1ISpdA/j iUfazW87RiSB3UEpLWUqTesR2F7UlQGQwbYbs8pxQB65L5ofbeukzbnVOY9ni7PARm ZgQ0SHiOT1cLht/iB3jbrcQJNWvo46UoNo/uoUHeiJBkDYeda+WoxQFqjy2GIdE8Iq GGQjIIks1wvEA== Date: Sat, 15 Mar 2025 16:02:35 -0700 From: Namhyung Kim To: Arnaldo Carvalho de Melo Cc: Ian Rogers , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , guoren , Paul Walmsley , Palmer Dabbelt , Albert Ou , Charlie Jenkins , Bibo Mao , Huacai Chen , Catalin Marinas , Jiri Slaby , =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, "linux-csky@vger.kernel.org" , linux-riscv@lists.infradead.org, Arnd Bergmann Subject: Re: [PATCH v5 00/11] perf: Support multiple system call tables in the build Message-ID: References: <20250308003209.234114-1-irogers@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250315_160240_045178_B34C5325 X-CRM114-Status: GOOD ( 28.69 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gRnJpLCBNYXIgMTQsIDIwMjUgYXQgMDU6NDg6MTJQTSAtMDMwMCwgQXJuYWxkbyBDYXJ2YWxo byBkZSBNZWxvIHdyb3RlOgo+IE9uIEZyaSwgTWFyIDE0LCAyMDI1IGF0IDAyOjI2OjQxUE0gLTAz MDAsIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyB3cm90ZToKPiA+IGl0IGZpbmRzIHRoZSBwYWly LCBidXQgdGhlbiBpdHMgc2MtPmFyZ3MgaGFzIGEgYm9ndXMgcG9pbnRlci4uLiBJJ2xsIHNlZQo+ ID4gd2hlcmUgdGhpcyBpc24ndCBiZWluZyBpbml0aWFsaXplZC4uLgo+IAo+IEJyZWFrcG9pbnQg NCwgdHJhY2VfX2ZpbmRfdXNhYmxlX2JwZl9wcm9nX2VudHJ5ICh0cmFjZT0weDdmZmZmZmZmYTUx MCwgc2M9MHgxMDQ2ZjEwKSBhdCBidWlsdGluLXRyYWNlLmM6Mzg3NAo+IDM4NzQJCQlib29sIGlz X2NhbmRpZGF0ZSA9IGZhbHNlOwo+IChnZGIpIG4KPiAzODc2CQkJaWYgKHBhaXIgPT0gTlVMTCB8 fCBwYWlyID09IHNjIHx8Cj4gKGdkYikgcCBwYWlyCj4gJDcgPSAoc3RydWN0IHN5c2NhbGwgKikg MHgxMDgzYzUwCj4gKGdkYikgcCBwYWlyLT5uYW1lCj4gJDggPSAweDgxNDc4ZSAiYWNjZXB0NCIK PiAoZ2RiKSBuCj4gMzg3NwkJCSAgICBwYWlyLT5icGZfcHJvZy5zeXNfZW50ZXIgPT0gdHJhY2Ut PnNrZWwtPnByb2dzLnN5c2NhbGxfdW5hdWdtZW50ZWQpCj4gKGdkYikgcCBpCj4gJDkgPSAxCj4g KGdkYikgbgo+IDM4NzYJCQlpZiAocGFpciA9PSBOVUxMIHx8IHBhaXIgPT0gc2MgfHwKPiAoZ2Ri KSBuCj4gMzg4MAkJCXByaW50Zigic2M9JXBcbiIsIHNjKTsgZmZsdXNoKHN0ZG91dCk7Cj4gKGdk Yikgbgo+IHNjPTB4MTA0NmYxMAo+IDM4ODEJCQlwcmludGYoInNjLT5uYW1lPSVwXG4iLCBzYy0+ bmFtZSk7IGZmbHVzaChzdGRvdXQpOwo+IChnZGIpIG4KPiBzYy0+bmFtZT0weDZjNjYyMDJjNzg2 YzM4MzAKPiAzODgyCQkJcHJpbnRmKCJzYy0+bnJfYXJncz0lZCwgc2MtPmFyZ3M9JXBcbiIsIHNj LT5ucl9hcmdzLCBzYy0+YXJncyk7IGZmbHVzaChzdGRvdXQpOwo+IChnZGIpIHAgc2MtPm5yX2Fy Z3MKPiAkMTAgPSAxOTM1NjM1MDQ1Cj4gKGdkYikgcCBzYy0+YXJncwo+ICQxMSA9IChzdHJ1Y3Qg dGVwX2Zvcm1hdF9maWVsZCAqKSAweDI1NzgzMDIwM2E2ZTY1NmMKPiAoZ2RiKSBwICpzYwo+ICQx MiA9IHtlX21hY2hpbmUgPSA1NDA2OTc3MDIsIGlkID0gODA3NzYxOTY4LCB0cF9mb3JtYXQgPSAw eDY1NzA3NTIwMmM3ODZjMzgsIG5yX2FyZ3MgPSAxOTM1NjM1MDQ1LCBhcmdzX3NpemUgPSAxNjM0 NDI3NzU5LCBicGZfcHJvZyA9IHtzeXNfZW50ZXIgPSAweDI1NzgzMDIwM2E3MjY0NjQsIAo+ICAg ICBzeXNfZXhpdCA9IDB4NzA3NTIwMmM3ODZjMzgzMH0sIGlzX2V4aXQgPSAxMDEsIGlzX29wZW4g PSAxMDEsIG5vbmV4aXN0ZW50ID0gMTE0LCB1c2VfYnRmID0gOTUsIGFyZ3MgPSAweDI1NzgzMDIw M2E2ZTY1NmMsIAo+ICAgbmFtZSA9IDB4NmM2NjIwMmM3ODZjMzgzMCA8ZXJyb3I6IENhbm5vdCBh Y2Nlc3MgbWVtb3J5IGF0IGFkZHJlc3MgMHg2YzY2MjAyYzc4NmMzODMwPiwgZm10ID0gMHgyNTc4 MzAyMDNhNzM2NzYxLCBhcmdfZm10ID0gMHg3ODZjMzgzMH0KPiAoZ2RiKSAKPiAKPiBPaywgcmFu IG91dCBvZiB0aW1lLCBidXQgaWYgSSBzaW1wbGUgYXZvaWQgdGhlIHNlY29uZCBsb29wIGluOgo+ IAo+IHN0YXRpYyBpbnQgdHJhY2VfX2luaXRfc3lzY2FsbHNfYnBmX3Byb2dfYXJyYXlfbWFwcyhz dHJ1Y3QgdHJhY2UgKnRyYWNlLCBpbnQgZV9tYWNoaW5lKQo+IAo+IAo+IEkuZS4gdGhlIG9uZSB0 aGF0IHN0YXJ0cyB3aXRoOgo+IAo+ICAgICAgICAgLyoKPiAgICAgICAgICAqIE5vdyBsZXRzIGRv IGEgc2Vjb25kIHBhc3MgbG9va2luZyBmb3IgZW5hYmxlZCBzeXNjYWxscyB3aXRob3V0Cj4gICAg ICAgICAgKiBhbiBhdWdtZW50ZXIgdGhhdCBoYXZlIGEgc2lnbmF0dXJlIHRoYXQgaXMgYSBzdXBl cnNldCBvZiBhbm90aGVyCj4gICAgICAgICAgKiBzeXNjYWxsIHdpdGggYW4gYXVnbWVudGVyIHNv IHRoYXQgd2UgY2FuIGF1dG8tcmV1c2UgaXQuCj4gCj4gVGhpczoKPiAKPiBkaWZmIC0tZ2l0IGEv dG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwo+ IGluZGV4IGUwNDM0ZjdkYzY3Y2I5ODguLjM2NjRiYjUxMmM3MGNhYmYgMTAwNjQ0Cj4gLS0tIGEv dG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKPiArKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJh Y2UuYwo+IEBAIC0zOTg5LDYgKzM5ODksOCBAQCBzdGF0aWMgaW50IHRyYWNlX19pbml0X3N5c2Nh bGxzX2JwZl9wcm9nX2FycmF5X21hcHMoc3RydWN0IHRyYWNlICp0cmFjZSwgaW50IGVfbQo+ICAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICAgICAgICAgfQo+ICAKPiArICAgICAg IHJldHVybiAwOwo+ICsKPiAgICAgICAgIC8qCj4gICAgICAgICAgKiBOb3cgbGV0cyBkbyBhIHNl Y29uZCBwYXNzIGxvb2tpbmcgZm9yIGVuYWJsZWQgc3lzY2FsbHMgd2l0aG91dAo+ICAgICAgICAg ICogYW4gYXVnbWVudGVyIHRoYXQgaGF2ZSBhIHNpZ25hdHVyZSB0aGF0IGlzIGEgc3VwZXJzZXQg b2YgYW5vdGhlcgo+IOKsoiBbYWNtZUB0b29sYm94IHBlcmYtdG9vbHMtbmV4dF0kIAo+IAo+IAo+ IFRoZW4gYWxsIHdvcmtzLCB3ZSBkb24ndCByZXVzZSBhbnkgQlBGIHByb2dyYW0sIGJ1dCB0aGVu IHRoYXQgaXMgYW4KPiBoZXVyaXN0aWMgYW55d2F5LCB0aGF0IGlzIHRyaWVkIGJlY3Vhc2UgbGFu ZGxvY2tfYWRkX3J1bGUgaGFzIGEgcG9pbnRlcgo+IGFyZ3VtZW50Ogo+IAo+IHJvb3RAbnVtYmVy On4jIHBlcmYgdHJhY2UgLWUgbGFuZGxvY2tfYWRkX3J1bGUgcGVyZiB0ZXN0IC13IGxhbmRsb2Nr Cj4gICAgICAwLjAwMCAoIDAuMDAzIG1zKTogcGVyZi83MTAzNCBsYW5kbG9ja19hZGRfcnVsZShy dWxlc2V0X2ZkOiAxMSwgcnVsZV90eXBlOiBMQU5ETE9DS19SVUxFX1BBVEhfQkVORUFUSCwgcnVs ZV9hdHRyOiAweDdmZmY2ZjJiYjU1MCwgZmxhZ3M6IDQ1KSA9IC0xIEVJTlZBTCAoSW52YWxpZCBh cmd1bWVudCkKPiAgICAgIDAuMDA0ICggMC4wMDEgbXMpOiBwZXJmLzcxMDM0IGxhbmRsb2NrX2Fk ZF9ydWxlKHJ1bGVzZXRfZmQ6IDExLCBydWxlX3R5cGU6IExBTkRMT0NLX1JVTEVfTkVUX1BPUlQs IHJ1bGVfYXR0cjogMHg3ZmZmNmYyYmI1NDAsIGZsYWdzOiA0NSkgPSAtMSBFSU5WQUwgKEludmFs aWQgYXJndW1lbnQpCj4gcm9vdEBudW1iZXI6fiMgcGVyZiB0ZXN0IGVudW0KPiAxMDU6IHBlcmYg dHJhY2UgZW51bSBhdWdtZW50YXRpb24gdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IE9rCj4gcm9vdEBudW1iZXI6fiMKPiAKPiBTbyBpdHMgc29tZSBzb3J0IG9mIHN5bmNyb25p emF0aW9uIG9uIHRoZSB2YXJpb3VzIG5ldyB0YWJsZXMsIHNvcnRlZCBieQo+IG5hbWUsIGV0YyB0 aGF0IHRoZW4gd2hlbiBpdGVyYXRpbmcgb3ZlciB0aGUgc3lzY2FsbHMgZW5kcyB1cCB1c2luZyBh IHNjCj4gdGhhdCBpcyBub3QgaW5pdGlhbGl6ZWQuCgpSaWdodCwgSSd2ZSByZWFsaXplZCB0aGF0 IGNhbGxpbmcgdHJhY2VfX3N5c2NhbGxfaW5mbygpIGNhbiBpbnZhbGlkYXRlCnRoZSBleGlzdGlu ZyBzYyBzaW5jZSBpdCBjYWxscyB0cmFjZV9fZmluZF9zeXNjYWxsKCkgd2hpY2ggcmVhbGxvY2F0 ZXMKYW5kIHJlc29ydHMgdGhlIHN5c2NhbGwgdGFibGUuICBUaGF0J3Mgd2h5IGl0IHdhcyBvayB3 aGVuIG5vIGZpbHRlciB3YXMKdXNlZCBzaW5jZSBpdCdkIGFsbG9jYXRlIHRoZSB3aG9sZSB0YWJs ZSBpbiB0aGUgZmlyc3QgcGFzcy4gIE90aGVyd2lzZQppdCBsb29rcyBmb3IgYSBwYWlyIHN5c2Nh bGwgd2hpbGUgaG9sZGluZyB0aGUgb3JpZ2luYWwgc2MgYnV0IGNhbGxpbmcKdGhlIGZ1bmN0aW9u IHdvdWxkIGludmFsaWRhdGUgdGhlIHNjLgoKV2hhdCBhYm91dCB0aGlzIChvbiB0b3Agb2YgbXkg ZWFybGllciBmaXgpPwoKVGhhbmtzLApOYW1oeXVuZwoKCi0tLTg8LS0tCmRpZmYgLS1naXQgYS90 b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmlu ZGV4IDQ5MTk5ZDc1M2I3Y2FmYmYuLmRhMGRkYzcxM2U2YjM1ZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xz L3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBA IC0yNTA2LDEwICsyNTA2LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbCAqdHJhY2VfX2ZpbmRf c3lzY2FsbChzdHJ1Y3QgdHJhY2UgKnRyYWNlLCBpbnQgZV9tYWNoaW5lLCBpCiAJfTsKIAlzdHJ1 Y3Qgc3lzY2FsbCAqc2MsICp0bXA7CiAKLQlzYyA9IGJzZWFyY2goJmtleSwgdHJhY2UtPnN5c2Nh bGxzLnRhYmxlLCB0cmFjZS0+c3lzY2FsbHMudGFibGVfc2l6ZSwKLQkJICAgICBzaXplb2Yoc3Ry dWN0IHN5c2NhbGwpLCBzeXNjYWxsX19jbXApOwotCWlmIChzYykKLQkJcmV0dXJuIHNjOworCWlm ICh0cmFjZS0+c3lzY2FsbHMudGFibGUpIHsKKwkJc2MgPSBic2VhcmNoKCZrZXksIHRyYWNlLT5z eXNjYWxscy50YWJsZSwgdHJhY2UtPnN5c2NhbGxzLnRhYmxlX3NpemUsCisJCQkgICAgIHNpemVv ZihzdHJ1Y3Qgc3lzY2FsbCksIHN5c2NhbGxfX2NtcCk7CisJCWlmIChzYykKKwkJCXJldHVybiBz YzsKKwl9CiAKIAl0bXAgPSByZWFsbG9jYXJyYXkodHJhY2UtPnN5c2NhbGxzLnRhYmxlLCB0cmFj ZS0+c3lzY2FsbHMudGFibGVfc2l6ZSArIDEsCiAJCQkgICBzaXplb2Yoc3RydWN0IHN5c2NhbGwp KTsKQEAgLTM4NTUsNiArMzg1NywxMCBAQCBzdGF0aWMgaW50IHRyYWNlX19icGZfc3lzX2VudGVy X2JlYXV0eV9tYXAoc3RydWN0IHRyYWNlICp0cmFjZSwgaW50IGVfbWFjaGluZSwgaQogCiBzdGF0 aWMgc3RydWN0IGJwZl9wcm9ncmFtICp0cmFjZV9fZmluZF91c2FibGVfYnBmX3Byb2dfZW50cnko c3RydWN0IHRyYWNlICp0cmFjZSwgc3RydWN0IHN5c2NhbGwgKnNjKQogeworCWludCBvcmlnX2lk ID0gc2MtPmlkOworCWNvbnN0IGNoYXIgKm9yaWdfbmFtZSA9IHNjLT5uYW1lOworCWludCBlX21h Y2hpbmUgPSBzYy0+ZV9tYWNoaW5lOworCXN0cnVjdCB0ZXBfZm9ybWF0X2ZpZWxkICphcmdzID0g c2MtPmFyZ3M7CiAJc3RydWN0IHRlcF9mb3JtYXRfZmllbGQgKmZpZWxkLCAqY2FuZGlkYXRlX2Zp ZWxkOwogCS8qCiAJICogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHN5c2NhbGxzIHRoYXQgaGF2 ZSBhIHBvaW50ZXI6CkBAIC0zODY2LDE4ICszODcyLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3By b2dyYW0gKnRyYWNlX19maW5kX3VzYWJsZV9icGZfcHJvZ19lbnRyeShzdHJ1Y3QgdHJhY2UgKnRy YWNlCiAKIAlyZXR1cm4gTlVMTDsKIAorCS8qIGNhbGxpbmcgdHJhY2VfX3N5c2NhbGxfaW5mbygp IG1heSBpbnZhbGlkYXRlICdzYycgKi8KIHRyeV90b19maW5kX3BhaXI6Ci0JZm9yIChpbnQgaSA9 IDAsIG51bV9pZHggPSBzeXNjYWxsdGJsX19udW1faWR4KHNjLT5lX21hY2hpbmUpOyBpIDwgbnVt X2lkeDsgKytpKSB7Ci0JCWludCBpZCA9IHN5c2NhbGx0YmxfX2lkX2F0X2lkeChzYy0+ZV9tYWNo aW5lLCBpKTsKLQkJc3RydWN0IHN5c2NhbGwgKnBhaXIgPSB0cmFjZV9fc3lzY2FsbF9pbmZvKHRy YWNlLCBOVUxMLCBzYy0+ZV9tYWNoaW5lLCBpZCk7CisJZm9yIChpbnQgaSA9IDAsIG51bV9pZHgg PSBzeXNjYWxsdGJsX19udW1faWR4KGVfbWFjaGluZSk7IGkgPCBudW1faWR4OyArK2kpIHsKKwkJ aW50IGlkID0gc3lzY2FsbHRibF9faWRfYXRfaWR4KGVfbWFjaGluZSwgaSk7CisJCXN0cnVjdCBz eXNjYWxsICpwYWlyID0gdHJhY2VfX3N5c2NhbGxfaW5mbyh0cmFjZSwgTlVMTCwgZV9tYWNoaW5l LCBpZCk7CiAJCXN0cnVjdCBicGZfcHJvZ3JhbSAqcGFpcl9wcm9nOwogCQlib29sIGlzX2NhbmRp ZGF0ZSA9IGZhbHNlOwogCi0JCWlmIChwYWlyID09IE5VTEwgfHwgcGFpciA9PSBzYyB8fAorCQlp ZiAocGFpciA9PSBOVUxMIHx8IHBhaXItPmlkID09IG9yaWdfaWQgfHwKIAkJICAgIHBhaXItPmJw Zl9wcm9nLnN5c19lbnRlciA9PSB0cmFjZS0+c2tlbC0+cHJvZ3Muc3lzY2FsbF91bmF1Z21lbnRl ZCkKIAkJCWNvbnRpbnVlOwogCi0JCWZvciAoZmllbGQgPSBzYy0+YXJncywgY2FuZGlkYXRlX2Zp ZWxkID0gcGFpci0+YXJnczsKKwkJZm9yIChmaWVsZCA9IGFyZ3MsIGNhbmRpZGF0ZV9maWVsZCA9 IHBhaXItPmFyZ3M7CiAJCSAgICAgZmllbGQgJiYgY2FuZGlkYXRlX2ZpZWxkOyBmaWVsZCA9IGZp ZWxkLT5uZXh0LCBjYW5kaWRhdGVfZmllbGQgPSBjYW5kaWRhdGVfZmllbGQtPm5leHQpIHsKIAkJ CWJvb2wgaXNfcG9pbnRlciA9IGZpZWxkLT5mbGFncyAmIFRFUF9GSUVMRF9JU19QT0lOVEVSLAog CQkJICAgICBjYW5kaWRhdGVfaXNfcG9pbnRlciA9IGNhbmRpZGF0ZV9maWVsZC0+ZmxhZ3MgJiBU RVBfRklFTERfSVNfUE9JTlRFUjsKQEAgLTM5NDQsNyArMzk1MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qg YnBmX3Byb2dyYW0gKnRyYWNlX19maW5kX3VzYWJsZV9icGZfcHJvZ19lbnRyeShzdHJ1Y3QgdHJh Y2UgKnRyYWNlCiAJCQkJZ290byBuZXh0X2NhbmRpZGF0ZTsKIAkJfQogCi0JCXByX2RlYnVnKCJS ZXVzaW5nIFwiJXNcIiBCUEYgc3lzX2VudGVyIGF1Z21lbnRlciBmb3IgXCIlc1wiXG4iLCBwYWly LT5uYW1lLCBzYy0+bmFtZSk7CisJCXByX2RlYnVnKCJSZXVzaW5nIFwiJXNcIiBCUEYgc3lzX2Vu dGVyIGF1Z21lbnRlciBmb3IgXCIlc1wiXG4iLCBwYWlyLT5uYW1lLCBvcmlnX25hbWUpOwogCQly ZXR1cm4gcGFpcl9wcm9nOwogCW5leHRfY2FuZGlkYXRlOgogCQljb250aW51ZTsKQEAgLTQwNDEs NiArNDA0OCwxMSBAQCBzdGF0aWMgaW50IHRyYWNlX19pbml0X3N5c2NhbGxzX2JwZl9wcm9nX2Fy cmF5X21hcHMoc3RydWN0IHRyYWNlICp0cmFjZSwgaW50IGVfbQogCQlpZiAocGFpcl9wcm9nID09 IE5VTEwpCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBHZXQgc3lzY2FsbCBpbmZvIGFnYWlu IGFzIGZpbmQgdXNhYmxlIGVudHJ5IGFib3ZlIG1pZ2h0CisJCSAqIG1vZGlmeSB0aGUgc3lzY2Fs bCB0YWJsZSBhbmQgc2h1ZmZsZSBpdC4KKwkJICovCisJCXNjID0gdHJhY2VfX3N5c2NhbGxfaW5m byh0cmFjZSwgTlVMTCwgZV9tYWNoaW5lLCBrZXkpOwogCQlzYy0+YnBmX3Byb2cuc3lzX2VudGVy ID0gcGFpcl9wcm9nOwogCiAJCS8qCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1yaXNjdgo=