From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 801A33A1BA; Sun, 15 Jun 2025 14:00:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749996050; cv=none; b=RwXPbOBOndyo1bOT6Gx6Rdrd/Lx5lxwb1DQCae+A7KIqa/deBIrfw6HEn/10iYuN5YQZE4I1aa+UNdRmxr9puVh8RGMJEctZbTOazfhxYPlchC3NVpyuNXJ+kqy3pQUdTHcpCjuTa22DcT2MpsCPQXJZF0wBxilpXmIpOLKn46Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749996050; c=relaxed/simple; bh=tzBgEfNbszZFjneQrhgK2sYcgixJ885U9DAEQALxusE=; h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To: References:In-Reply-To; b=kSzcFHteaYoeGMavDklN0+PjIXX1jeftU40ZsklZ7btepxqWgq13OV/JUahTXFq2asRrWbRLMXxCsLFTj8U5ZdC7cfNN/GKiLKQdguoj0heH0eYSSjGoW6yWz5b8CAoBl/BNvszvnlcS4mqHfMD1BU7jruJMFZUDDs1CR+GiQPk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=A7TiUfOZ; arc=none smtp.client-ip=217.70.183.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="A7TiUfOZ" Received: by mail.gandi.net (Postfix) with ESMTPSA id D7A6B205B1; Sun, 15 Jun 2025 14:00:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1749996037; 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: in-reply-to:in-reply-to:references:references; bh=YxXS5lj0DrF49L/g0V9R5FkVyXH9S7gR1QjB4hu3uuE=; b=A7TiUfOZSoNCNlpd3feyEIMq7JweNSA26Ki+asH1Rd/WvFZi6wU8mGFvLOiyagoFjwL8JL xo9M58/kDnjnSORKMzRqxzrCLgPAGB8Bu5MzN3EMIYoY6aN+6oHKGrYFTIO3qN/Pw67h/B IMc2jyqqF5WnGXYgwIPTBVuwK7QfL9I9ZUJ6sI7veC8g4rtStWZ/IVP4WS757EaSs2cq3B 2xNCG4rBNC84HJC/1B3ddFVbvd1E5riocXBoJdq4moXdkt4MuVYmrwo0+OjTp/wdmH6h4R eSQhByt4F2xarijNXWHhMAAbmtcVLzvls0lGIxnTZz73uWzR5oqhqzM6rTospw== Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Sun, 15 Jun 2025 16:00:30 +0200 Message-Id: Cc: "Peter Zijlstra" , "Alexei Starovoitov" , "Daniel Borkmann" , "Andrii Nakryiko" , "Martin KaFai Lau" , "Eduard Zingerman" , "Song Liu" , "Yonghong Song" , "John Fastabend" , "KP Singh" , "Stanislav Fomichev" , "Hao Luo" , "Jiri Olsa" , "David S. Miller" , "David Ahern" , "Thomas Gleixner" , "Ingo Molnar" , "Borislav Petkov" , "Dave Hansen" , "X86 ML" , "H. Peter Anvin" , "Menglong Dong" , =?utf-8?q?Bj=C3=B6rn_T=C3=B6pel?= , "Pu Lehui" , "Puranjay Mohan" , "Paul Walmsley" , "Palmer Dabbelt" , "Albert Ou" , "Alexandre Ghiti" , "Ilya Leoshkevich" , "Heiko Carstens" , "Vasily Gorbik" , "Alexander Gordeev" , "Christian Borntraeger" , "Sven Schnelle" , "Hari Bathini" , "Christophe Leroy" , "Naveen N Rao" , "Madhavan Srinivasan" , "Michael Ellerman" , "Nicholas Piggin" , "Mykola Lysenko" , "Shuah Khan" , "Maxime Coquelin" , "Alexandre Torgue" , , "Thomas Petazzoni" , "Bastien Curutchet" , "Network Development" , "bpf" , "LKML" , =?utf-8?q?Bj=C3=B6rn_T=C3=B6pel?= , "linux-riscv" , "linux-s390" , "ppc-dev" , "open list:KERNEL SELFTEST FRAMEWORK" , , "linux-arm-kernel" , "dwarves" Subject: Re: [PATCH bpf 2/7] bpf/x86: prevent trampoline attachment when args location on stack is uncertain From: =?utf-8?q?Alexis_Lothor=C3=A9?= To: "Alexei Starovoitov" X-Mailer: aerc 0.20.1-0-g2ecb8770224a References: <20250613-deny_trampoline_structs_on_stack-v1-0-5be9211768c3@bootlin.com> <20250613-deny_trampoline_structs_on_stack-v1-2-5be9211768c3@bootlin.com> <20250613081150.GJ2273038@noisy.programming.kicks-ass.net> <20250613083232.GL2273038@noisy.programming.kicks-ass.net> In-Reply-To: X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddugddvfeekkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepggfgtgffkfevuffhvffofhgjsehtqhertdertdejnecuhfhrohhmpeetlhgvgihishcunfhothhhohhrrocuoegrlhgvgihishdrlhhothhhohhrvgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepteekleehffevvedvudfhueelffeugfdtveefvdfguefgffehtdekleetheelleffnecuffhomhgrihhnpehkvghrnhgvlhdrohhrghenucfkphepvdgrtddvmeekgedvkeemfhelgegtmegvtddtmeemsgehvgenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpedvrgdtvdemkeegvdekmehfleegtgemvgdttdemmegshegvpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpegrlhgvgihishdrlhhothhhohhrvgessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepiedtpdhrtghpthhtoheprghlvgigvghirdhsthgrrhhovhhoihhtohhvsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphgvthgvrhiisehinhhfrhgruggvrggurdhorhhgpdhrtghpthhtoheprghstheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepuggrnhhivghlsehiohhgvggrrhgso higrdhnvghtpdhrtghpthhtoheprghnughrihhisehkvghrnhgvlhdrohhrghdprhgtphhtthhopehmrghrthhinhdrlhgruheslhhinhhugidruggvvhdprhgtphhtthhopegvugguhiiikeejsehgmhgrihhlrdgtohhmpdhrtghpthhtohepshhonhhgsehkvghrnhgvlhdrohhrgh X-GND-Sasl: alexis.lothore@bootlin.com On Sat Jun 14, 2025 at 12:35 AM CEST, Alexei Starovoitov wrote: > On Fri, Jun 13, 2025 at 1:59=E2=80=AFAM Alexis Lothor=C3=A9 > wrote: >> >> On Fri Jun 13, 2025 at 10:32 AM CEST, Peter Zijlstra wrote: >> > On Fri, Jun 13, 2025 at 10:26:37AM +0200, Alexis Lothor=C3=A9 wrote: [...] >> If I need to respin, I'll rewrite the commit message to include the deta= ils >> above. > > No need to respin. The cover letter is quite detailed already. > > But looking at the patch and this thread I think we need to agree > on the long term approach to BTF, since people assume that > it's a more compact dwarf and any missing information > should be added to it. > Like in this case special alignment case and packed attributes > are not expressed in BTF and I believe they should not be. > BTF is not a debug format and not a substitute for dwarf. > There is no goal to express everything possible in C. > It's minimal, because BTF is _practical_ description of > types and data present in the kernel. > I don't think the special case of packing and alignment exists > in the kernel today, so the current format is sufficient. > It doesn't miss anything. > I think we made arm64 JIT unnecessary restrictive and now considering > to make all other JITs restrictive too for hypothetical case > of some future kernel functions. > I feel we're going in the wrong direction. > Instead we should teach pahole to sanitize BTF where functions > are using this fancy alignment and packed structs. > pahole can see it in dwarf and can skip emitting BTF for such > functions. Then the kernel JITs on all architectures won't even > see such cases. > > The issue was initially discovered by a selftest: > https://lore.kernel.org/bpf/20250411-many_args_arm64-v1-3-0a32fe72339e@bo= otlin.com/ > that attempted to support these two types: > +struct bpf_testmod_struct_arg_4 { > + __u64 a; > + __u64 b; > +}; > + > +struct bpf_testmod_struct_arg_5 { > + __int128 a; > +}; > > The former is present in the kernel. It's more or less sockptr_t, > and people want to access it for observability in tracing. > The latter doesn't exist in the kernel and we cannot represent > it properly in BTF without losing alignment. > > So I think we should go back to that series: > https://lore.kernel.org/bpf/20250411-many_args_arm64-v1-0-0a32fe72339e@bo= otlin.com/ > > remove __int128 selftest, but also teach pahole > to recognize types that cannot be represented in BTF and > don't emit them either into vmlinux or in kernel module > (like in this case it was bpf_testmod.ko) > I think that would be a better path forward aligned > with the long term goal of BTF. > > And before people ask... pahole is a trusted component of the build > system. We trust it just as we trust gcc, clang, linker, objtool. So if I understand correctly your point, it would be better to just move ou= t those constraints from the JIT compilers, and just not represent those spec= ial cases in BTF, so that it becomes impossible to hook programs on those funct= ions, since they are not event present in BTF info. And so: - cancel this series - revert the small ARM64 check about struct passed on stack - update pahole to make sure that it does not encode info about this specif= ic kind of functions. I still expect some challenges with this. AFAIU pahole uses DWARF to genera= te BTF, and discussions in [1] highlighted the fact that the attributes alteri= ng the structs alignment are not reliably encoded in DWARF. Maybe pahole can "guess" if a struct has been altered, by doing something like btf_is_struct_packed in libbpf ? As Andrii mentioned in [2], it may not be able to cover all cases, but that could be a start. If that's indeed the desired direction, I can take a further look at this. + CC dwarves ML Alexis [1] https://lore.kernel.org/bpf/9a2ba0ad-b34d-42f8-89a6-d9a44f007bdc@linux.= dev/ [2] https://lore.kernel.org/bpf/CAEf4BzZHMYyGDZ4c4eNXG7Fm=3DecxCCbKhKbQTbCj= vWmKtdwvBw@mail.gmail.com/ 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 95383C61CE8 for ; Sun, 15 Jun 2025 14:00:56 +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:References:To:From:Subject: Cc:Message-Id:Date:Mime-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OWa69lvRwNFVbLQcuiF+uBRvyP/yUpH/8WfGPjMc95E=; b=IUWUHFZEWsov3L L6Ve+WimhJqnlFVdqN8iOYJ2rOyy2aq8aIX7s1REbuG2Kh1anJLlk7cbHjXNJ6Kk42uZaCsHMG8Dw T/yOypl3FKl6aLs7MuihEESoCWEjDYvwELatkWffK+n0eX4aBhz79wr4TfWCRZeON7IeNdhHcbBX9 uZjddtfynMrkxdFAykHKMTVjGkykNmPz3F/xkt7ySNW+d6FDDNAAxalVUjrhJhGi9r+N1PxxONnAD +84z9Bdtuf0PFb9fSxlX2jy7tkQRZ0iVD6gWnhD3SxfAmh4cgAxQFdXhf8Och/K3QD3hz0HK+9IK2 d++tGZHIdedHCwOUJSrw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uQnug-00000002Xfb-3oz3; Sun, 15 Jun 2025 14:00:46 +0000 Received: from relay3-d.mail.gandi.net ([2001:4b98:dc4:8::223]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uQnud-00000002Xer-2bTa; Sun, 15 Jun 2025 14:00:45 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id D7A6B205B1; Sun, 15 Jun 2025 14:00:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1749996037; 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: in-reply-to:in-reply-to:references:references; bh=YxXS5lj0DrF49L/g0V9R5FkVyXH9S7gR1QjB4hu3uuE=; b=A7TiUfOZSoNCNlpd3feyEIMq7JweNSA26Ki+asH1Rd/WvFZi6wU8mGFvLOiyagoFjwL8JL xo9M58/kDnjnSORKMzRqxzrCLgPAGB8Bu5MzN3EMIYoY6aN+6oHKGrYFTIO3qN/Pw67h/B IMc2jyqqF5WnGXYgwIPTBVuwK7QfL9I9ZUJ6sI7veC8g4rtStWZ/IVP4WS757EaSs2cq3B 2xNCG4rBNC84HJC/1B3ddFVbvd1E5riocXBoJdq4moXdkt4MuVYmrwo0+OjTp/wdmH6h4R eSQhByt4F2xarijNXWHhMAAbmtcVLzvls0lGIxnTZz73uWzR5oqhqzM6rTospw== Mime-Version: 1.0 Date: Sun, 15 Jun 2025 16:00:30 +0200 Message-Id: Cc: "Peter Zijlstra" , "Alexei Starovoitov" , "Daniel Borkmann" , "Andrii Nakryiko" , "Martin KaFai Lau" , "Eduard Zingerman" , "Song Liu" , "Yonghong Song" , "John Fastabend" , "KP Singh" , "Stanislav Fomichev" , "Hao Luo" , "Jiri Olsa" , "David S. Miller" , "David Ahern" , "Thomas Gleixner" , "Ingo Molnar" , "Borislav Petkov" , "Dave Hansen" , "X86 ML" , "H. Peter Anvin" , "Menglong Dong" , =?utf-8?q?Bj=C3=B6rn_T=C3=B6pel?= , "Pu Lehui" , "Puranjay Mohan" , "Paul Walmsley" , "Palmer Dabbelt" , "Albert Ou" , "Alexandre Ghiti" , "Ilya Leoshkevich" , "Heiko Carstens" , "Vasily Gorbik" , "Alexander Gordeev" , "Christian Borntraeger" , "Sven Schnelle" , "Hari Bathini" , "Christophe Leroy" , "Naveen N Rao" , "Madhavan Srinivasan" , "Michael Ellerman" , "Nicholas Piggin" , "Mykola Lysenko" , "Shuah Khan" , "Maxime Coquelin" , "Alexandre Torgue" , , "Thomas Petazzoni" , "Bastien Curutchet" , "Network Development" , "bpf" , "LKML" , =?utf-8?q?Bj=C3=B6rn_T=C3=B6pel?= , "linux-riscv" , "linux-s390" , "ppc-dev" , "open list:KERNEL SELFTEST FRAMEWORK" , , "linux-arm-kernel" , "dwarves" Subject: Re: [PATCH bpf 2/7] bpf/x86: prevent trampoline attachment when args location on stack is uncertain From: =?utf-8?q?Alexis_Lothor=C3=A9?= To: "Alexei Starovoitov" X-Mailer: aerc 0.20.1-0-g2ecb8770224a References: <20250613-deny_trampoline_structs_on_stack-v1-0-5be9211768c3@bootlin.com> <20250613-deny_trampoline_structs_on_stack-v1-2-5be9211768c3@bootlin.com> <20250613081150.GJ2273038@noisy.programming.kicks-ass.net> <20250613083232.GL2273038@noisy.programming.kicks-ass.net> In-Reply-To: X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddugddvfeekkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepggfgtgffkfevuffhvffofhgjsehtqhertdertdejnecuhfhrohhmpeetlhgvgihishcunfhothhhohhrrocuoegrlhgvgihishdrlhhothhhohhrvgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepteekleehffevvedvudfhueelffeugfdtveefvdfguefgffehtdekleetheelleffnecuffhomhgrihhnpehkvghrnhgvlhdrohhrghenucfkphepvdgrtddvmeekgedvkeemfhelgegtmegvtddtmeemsgehvgenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpedvrgdtvdemkeegvdekmehfleegtgemvgdttdemmegshegvpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpegrlhgvgihishdrlhhothhhohhrvgessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepiedtpdhrtghpthhtoheprghlvgigvghirdhsthgrrhhovhhoihhtohhvsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphgvthgvrhiisehinhhfrhgruggvrggurdhorhhgpdhrtghpthhtoheprghstheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepuggrnhhivghlsehiohhgvggrrhgso higrdhnvghtpdhrtghpthhtoheprghnughrihhisehkvghrnhgvlhdrohhrghdprhgtphhtthhopehmrghrthhinhdrlhgruheslhhinhhugidruggvvhdprhgtphhtthhopegvugguhiiikeejsehgmhgrihhlrdgtohhmpdhrtghpthhtohepshhonhhgsehkvghrnhgvlhdrohhrgh X-GND-Sasl: alexis.lothore@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250615_070044_274183_FDFDEC6B X-CRM114-Status: GOOD ( 34.86 ) 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 T24gU2F0IEp1biAxNCwgMjAyNSBhdCAxMjozNSBBTSBDRVNULCBBbGV4ZWkgU3Rhcm92b2l0b3Yg d3JvdGU6Cj4gT24gRnJpLCBKdW4gMTMsIDIwMjUgYXQgMTo1OeKAr0FNIEFsZXhpcyBMb3Rob3LD qQo+IDxhbGV4aXMubG90aG9yZUBib290bGluLmNvbT4gd3JvdGU6Cj4+Cj4+IE9uIEZyaSBKdW4g MTMsIDIwMjUgYXQgMTA6MzIgQU0gQ0VTVCwgUGV0ZXIgWmlqbHN0cmEgd3JvdGU6Cj4+ID4gT24g RnJpLCBKdW4gMTMsIDIwMjUgYXQgMTA6MjY6MzdBTSArMDIwMCwgQWxleGlzIExvdGhvcsOpIHdy b3RlOgoKWy4uLl0KCj4+IElmIEkgbmVlZCB0byByZXNwaW4sIEknbGwgcmV3cml0ZSB0aGUgY29t bWl0IG1lc3NhZ2UgdG8gaW5jbHVkZSB0aGUgZGV0YWlscwo+PiBhYm92ZS4KPgo+IE5vIG5lZWQg dG8gcmVzcGluLiBUaGUgY292ZXIgbGV0dGVyIGlzIHF1aXRlIGRldGFpbGVkIGFscmVhZHkuCj4K PiBCdXQgbG9va2luZyBhdCB0aGUgcGF0Y2ggYW5kIHRoaXMgdGhyZWFkIEkgdGhpbmsgd2UgbmVl ZCB0byBhZ3JlZQo+IG9uIHRoZSBsb25nIHRlcm0gYXBwcm9hY2ggdG8gQlRGLCBzaW5jZSBwZW9w bGUgYXNzdW1lIHRoYXQKPiBpdCdzIGEgbW9yZSBjb21wYWN0IGR3YXJmIGFuZCBhbnkgbWlzc2lu ZyBpbmZvcm1hdGlvbgo+IHNob3VsZCBiZSBhZGRlZCB0byBpdC4KPiBMaWtlIGluIHRoaXMgY2Fz ZSBzcGVjaWFsIGFsaWdubWVudCBjYXNlIGFuZCBwYWNrZWQgYXR0cmlidXRlcwo+IGFyZSBub3Qg ZXhwcmVzc2VkIGluIEJURiBhbmQgSSBiZWxpZXZlIHRoZXkgc2hvdWxkIG5vdCBiZS4KPiBCVEYg aXMgbm90IGEgZGVidWcgZm9ybWF0IGFuZCBub3QgYSBzdWJzdGl0dXRlIGZvciBkd2FyZi4KPiBU aGVyZSBpcyBubyBnb2FsIHRvIGV4cHJlc3MgZXZlcnl0aGluZyBwb3NzaWJsZSBpbiBDLgo+IEl0 J3MgbWluaW1hbCwgYmVjYXVzZSBCVEYgaXMgX3ByYWN0aWNhbF8gZGVzY3JpcHRpb24gb2YKPiB0 eXBlcyBhbmQgZGF0YSBwcmVzZW50IGluIHRoZSBrZXJuZWwuCj4gSSBkb24ndCB0aGluayB0aGUg c3BlY2lhbCBjYXNlIG9mIHBhY2tpbmcgYW5kIGFsaWdubWVudCBleGlzdHMKPiBpbiB0aGUga2Vy bmVsIHRvZGF5LCBzbyB0aGUgY3VycmVudCBmb3JtYXQgaXMgc3VmZmljaWVudC4KPiBJdCBkb2Vz bid0IG1pc3MgYW55dGhpbmcuCj4gSSB0aGluayB3ZSBtYWRlIGFybTY0IEpJVCB1bm5lY2Vzc2Fy eSByZXN0cmljdGl2ZSBhbmQgbm93IGNvbnNpZGVyaW5nCj4gdG8gbWFrZSBhbGwgb3RoZXIgSklU cyByZXN0cmljdGl2ZSB0b28gZm9yIGh5cG90aGV0aWNhbCBjYXNlCj4gb2Ygc29tZSBmdXR1cmUg a2VybmVsIGZ1bmN0aW9ucy4KPiBJIGZlZWwgd2UncmUgZ29pbmcgaW4gdGhlIHdyb25nIGRpcmVj dGlvbi4KPiBJbnN0ZWFkIHdlIHNob3VsZCB0ZWFjaCBwYWhvbGUgdG8gc2FuaXRpemUgQlRGIHdo ZXJlIGZ1bmN0aW9ucwo+IGFyZSB1c2luZyB0aGlzIGZhbmN5IGFsaWdubWVudCBhbmQgcGFja2Vk IHN0cnVjdHMuCj4gcGFob2xlIGNhbiBzZWUgaXQgaW4gZHdhcmYgYW5kIGNhbiBza2lwIGVtaXR0 aW5nIEJURiBmb3Igc3VjaAo+IGZ1bmN0aW9ucy4gVGhlbiB0aGUga2VybmVsIEpJVHMgb24gYWxs IGFyY2hpdGVjdHVyZXMgd29uJ3QgZXZlbgo+IHNlZSBzdWNoIGNhc2VzLgo+Cj4gVGhlIGlzc3Vl IHdhcyBpbml0aWFsbHkgZGlzY292ZXJlZCBieSBhIHNlbGZ0ZXN0Ogo+IGh0dHBzOi8vbG9yZS5r ZXJuZWwub3JnL2JwZi8yMDI1MDQxMS1tYW55X2FyZ3NfYXJtNjQtdjEtMy0wYTMyZmU3MjMzOWVA Ym9vdGxpbi5jb20vCj4gdGhhdCBhdHRlbXB0ZWQgdG8gc3VwcG9ydCB0aGVzZSB0d28gdHlwZXM6 Cj4gK3N0cnVjdCBicGZfdGVzdG1vZF9zdHJ1Y3RfYXJnXzQgewo+ICsgX191NjQgYTsKPiArIF9f dTY0IGI7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ181IHsKPiAr IF9faW50MTI4IGE7Cj4gK307Cj4KPiBUaGUgZm9ybWVyIGlzIHByZXNlbnQgaW4gdGhlIGtlcm5l bC4gSXQncyBtb3JlIG9yIGxlc3Mgc29ja3B0cl90LAo+IGFuZCBwZW9wbGUgd2FudCB0byBhY2Nl c3MgaXQgZm9yIG9ic2VydmFiaWxpdHkgaW4gdHJhY2luZy4KPiBUaGUgbGF0dGVyIGRvZXNuJ3Qg ZXhpc3QgaW4gdGhlIGtlcm5lbCBhbmQgd2UgY2Fubm90IHJlcHJlc2VudAo+IGl0IHByb3Blcmx5 IGluIEJURiB3aXRob3V0IGxvc2luZyBhbGlnbm1lbnQuCj4KPiBTbyBJIHRoaW5rIHdlIHNob3Vs ZCBnbyBiYWNrIHRvIHRoYXQgc2VyaWVzOgo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2JwZi8y MDI1MDQxMS1tYW55X2FyZ3NfYXJtNjQtdjEtMC0wYTMyZmU3MjMzOWVAYm9vdGxpbi5jb20vCj4K PiByZW1vdmUgX19pbnQxMjggc2VsZnRlc3QsIGJ1dCBhbHNvIHRlYWNoIHBhaG9sZQo+IHRvIHJl Y29nbml6ZSB0eXBlcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBCVEYgYW5kCj4gZG9u J3QgZW1pdCB0aGVtIGVpdGhlciBpbnRvIHZtbGludXggb3IgaW4ga2VybmVsIG1vZHVsZQo+IChs aWtlIGluIHRoaXMgY2FzZSBpdCB3YXMgYnBmX3Rlc3Rtb2Qua28pCj4gSSB0aGluayB0aGF0IHdv dWxkIGJlIGEgYmV0dGVyIHBhdGggZm9yd2FyZCBhbGlnbmVkCj4gd2l0aCB0aGUgbG9uZyB0ZXJt IGdvYWwgb2YgQlRGLgo+Cj4gQW5kIGJlZm9yZSBwZW9wbGUgYXNrLi4uIHBhaG9sZSBpcyBhIHRy dXN0ZWQgY29tcG9uZW50IG9mIHRoZSBidWlsZAo+IHN5c3RlbS4gV2UgdHJ1c3QgaXQganVzdCBh cyB3ZSB0cnVzdCBnY2MsIGNsYW5nLCBsaW5rZXIsIG9ianRvb2wuCgpTbyBpZiBJIHVuZGVyc3Rh bmQgY29ycmVjdGx5IHlvdXIgcG9pbnQsIGl0IHdvdWxkIGJlIGJldHRlciB0byBqdXN0IG1vdmUg b3V0CnRob3NlIGNvbnN0cmFpbnRzIGZyb20gdGhlIEpJVCBjb21waWxlcnMsIGFuZCBqdXN0IG5v dCByZXByZXNlbnQgdGhvc2Ugc3BlY2lhbApjYXNlcyBpbiBCVEYsIHNvIHRoYXQgaXQgYmVjb21l cyBpbXBvc3NpYmxlIHRvIGhvb2sgcHJvZ3JhbXMgb24gdGhvc2UgZnVuY3Rpb25zLApzaW5jZSB0 aGV5IGFyZSBub3QgZXZlbnQgcHJlc2VudCBpbiBCVEYgaW5mby4KQW5kIHNvOgotIGNhbmNlbCB0 aGlzIHNlcmllcwotIHJldmVydCB0aGUgc21hbGwgQVJNNjQgY2hlY2sgYWJvdXQgc3RydWN0IHBh c3NlZCBvbiBzdGFjawotIHVwZGF0ZSBwYWhvbGUgdG8gbWFrZSBzdXJlIHRoYXQgaXQgZG9lcyBu b3QgZW5jb2RlIGluZm8gYWJvdXQgdGhpcyBzcGVjaWZpYwogIGtpbmQgb2YgZnVuY3Rpb25zLgoK SSBzdGlsbCBleHBlY3Qgc29tZSBjaGFsbGVuZ2VzIHdpdGggdGhpcy4gQUZBSVUgcGFob2xlIHVz ZXMgRFdBUkYgdG8gZ2VuZXJhdGUKQlRGLCBhbmQgZGlzY3Vzc2lvbnMgaW4gWzFdIGhpZ2hsaWdo dGVkIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZXMgYWx0ZXJpbmcKdGhlIHN0cnVjdHMgYWxp Z25tZW50IGFyZSBub3QgcmVsaWFibHkgZW5jb2RlZCBpbiBEV0FSRi4gTWF5YmUgcGFob2xlIGNh bgoiZ3Vlc3MiIGlmIGEgc3RydWN0IGhhcyBiZWVuIGFsdGVyZWQsIGJ5IGRvaW5nIHNvbWV0aGlu ZyBsaWtlCmJ0Zl9pc19zdHJ1Y3RfcGFja2VkIGluIGxpYmJwZiA/IEFzIEFuZHJpaSBtZW50aW9u ZWQgaW4gWzJdLCBpdCBtYXkgbm90IGJlCmFibGUgdG8gY292ZXIgYWxsIGNhc2VzLCBidXQgdGhh dCBjb3VsZCAgYmUgYSBzdGFydC4gSWYgdGhhdCdzIGluZGVlZCB0aGUKZGVzaXJlZCBkaXJlY3Rp b24sIEkgY2FuIHRha2UgYSBmdXJ0aGVyIGxvb2sgYXQgdGhpcy4KCisgQ0MgZHdhcnZlcyBNTAoK QWxleGlzCgpbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYnBmLzlhMmJhMGFkLWIzNGQtNDJm OC04OWE2LWQ5YTQ0ZjAwN2JkY0BsaW51eC5kZXYvClsyXSBodHRwczovL2xvcmUua2VybmVsLm9y Zy9icGYvQ0FFZjRCelpITVl5R0RaNGM0ZU5YRzdGbT1lY3hDQ2JLaEtiUVRiQ2p2V21LdGR3dkJ3 QG1haWwuZ21haWwuY29tLwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtcmlzY3YK