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 88F03CCF2DE for ; Mon, 19 Oct 2026 14:01:35 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jXyiVtE6UK4AHMhBaupjsl0E/r8Z9z2PWS4xrP0x+c4=; b=UMO+crYJdA0Yok +RgUn00iXJPa1Gz/IGcjxfxBnARItLQLM6IZDaubKnlM1dB7oza6dKr0/nBY1L74d+6KSjpb0UA8Y yDqEPh6Bgo9liiDF93rR1j876TYVSxwexr9OB1opYDhDQ4lL6niLwkDEZh1gJrUumCF+1oA4Sr/2Y lJ0XlBYsUNxvbXlNh8JE1N4zSuGasiHoP3SAFH0WkptOOE9IRC/VTQ0ahCQeMjMaZmaLl8jL8m764 mS0/gJ95bWWuvAVJEZposvrmle0tZwXDNcK5X0U80u2DXcAj7qNQIDHPwkKWhpv+Ab47dU352XBkr yDE7vt7l35RYYxhLuS1w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInvX-00000007dLf-05bW; Mon, 19 Oct 2026 14:01:23 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInvW-00000007dKy-0PDT for linux-riscv@lists.infradead.org; Mon, 19 Oct 2026 14:01:22 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9111942B70; Mon, 19 Oct 2026 14:01:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E2991F000C7; Mon, 19 Oct 2026 14:01:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418481; bh=gBlviaq2Bd1jxA4rhzos6vfoZby6wGFF0L4p6Ivg+2I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OIEf7OWBonhlFXBGqPTKSHJJN7/2RtkRSruw26RcyUNvIFj8eG1829evIbJ2RETxi eKlRsBclVAEWb31SoglLyvWUxMApgjXpZu8PY9C4l4uLOoyqPDQa0uvfCRYG8dd7Dr qMTe8ksrYEaUGMCEnxuDeOY7ntf5adHgReJESW4oL8/wh8Ser+U6goqYzhItfY4RIW 3KF+eEwGD4NgaWvqGuO26pu7TV0s2j9OTEkJVNWvdmf/0nvyEr/UCqQ91khOK9ia5F b+JxEbFto6KQLkjQ7nPi7jZ0njM88Bg/Kvelmy8E6YT62+qFkq5uvvj8hHR0t5lWTX cBTPNpuhIQ2Jg== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Rui Qi , Nam Cao , Paul Walmsley , Sasha Levin , palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-6.6] riscv: kprobes: Prevent probes in breakpoint handlers Date: Mon, 19 Oct 2026 09:49:30 -0400 Message-ID: <20261019135441.1420968-279-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 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 RnJvbTogUnVpIFFpIDxxaXJ1aS4wMDFAYnl0ZWRhbmNlLmNvbT4KClsgVXBzdHJlYW0gY29tbWl0 IGU3ZDhlYTZjNmQxYmM2ODVhODk0M2ZmYWQyZDM2NzliZTkyZDE2NGYgXQoKVGhlIGZ0cmFjZSBz ZWxmdGVzdCBtdWx0aXBsZV9rcHJvYmVzLnRjIHJlZ2lzdGVycyBrcHJvYmUgZXZlbnRzIG9uCnRo ZSBmaXJzdCAyNTYgdGV4dCBzeW1ib2xzIGZyb20gL3Byb2Mva2FsbHN5bXMuIElmIGhhbmRsZV9i cmVhaygpIGlzCnNlbGVjdGVkIGFzIGEgcHJvYmUgdGFyZ2V0IG9uIFJJU0MtViwgdGhlIGJyZWFr cG9pbnQgZXhjZXB0aW9uIHBhdGgKY2FuIHRyYXAgYWdhaW4gYmVmb3JlIGl0IHJlYWNoZXMgdGhl IGtwcm9iZSBicmVha3BvaW50IGhhbmRsZXIuIFRoYXQKcmVjdXJzaXZlbHkgZW50ZXJzIGRvX3Ry YXBfYnJlYWsoKSBhbmQgY2FuIG1ha2UgdGhlIHN5c3RlbQp1bnJlc3BvbnNpdmUuCgpNYXJrIGhh bmRsZV9icmVhaygpIGFuZCBpdHMgbG9jYWwgcHJvYmUgZGlzcGF0Y2ggaGVscGVycyBhcyBub2tw cm9iZQpzeW1ib2xzIHNvIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBrcHJvYmUgYmxhY2tsaXN0LCBt YXRjaGluZyBvdGhlcgpsb3ctbGV2ZWwgYnJlYWtwb2ludCBleGNlcHRpb24gcGF0aHMuCgpTaWdu ZWQtb2ZmLWJ5OiBSdWkgUWkgPHFpcnVpLjAwMUBieXRlZGFuY2UuY29tPgpSZXZpZXdlZC1ieTog TmFtIENhbyA8bmFtY2FvQGxpbnV0cm9uaXguZGU+Ckxpbms6IGh0dHBzOi8vcGF0Y2gubXNnaWQu bGluay8yMDI2MDgwNjA0MzgwNy4yNTgzMDAxLTEtcWlydWkuMDAxQGJ5dGVkYW5jZS5jb20KU2ln bmVkLW9mZi1ieTogUGF1bCBXYWxtc2xleSA8cGp3QGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6 IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0tCgpMTE0gR2VuZXJhdGVkIGV4cGxh bmF0aW9ucywgbWF5IGJlIGNvbXBsZXRlbHkgYm9ndXM6CgpUaGlzIGlzIGEgMy1saW5lIFJJU0Mt ViBrcHJvYmUgYmxhY2tsaXN0IHJlc3RvcmUgdGhhdCBwcmV2ZW50cyByZWN1cnNpdmUKYnJlYWtw b2ludCB0cmFwcyBmcm9tIGhhbmdpbmcgdGhlIG1hY2hpbmUuIFRoZSBsb2NhbCB0cmVlIGlzCioq Ni4xMi4xMTEqKiAoYHBlbmRpbmctNi4xMmApOyB0aGUgYnVnZ3kgYGhhbmRsZV9icmVhaygpYCBw YXRoIGlzCnByZXNlbnQgYW5kIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHkuCgo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhB U0UgMTogQ09NTUlUIE1FU1NBR0UgRk9SRU5TSUNTCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKipTdGVwIDEuMTogUEFSU0Ug VEhFIFNVQkpFQ1QgTElORSoqClJlY29yZDogW3Jpc2N2OiBrcHJvYmVzXSBbUHJldmVudF0gW1N0 b3Aga3Byb2JlcyBvbiBSSVNDLVYgYnJlYWtwb2ludApleGNlcHRpb24gaGFuZGxlcnMgc28gYSBw cm9iZSBvbiB0aGF0IHBhdGggY2Fubm90IHJlY3Vyc2VdCgoqKlN0ZXAgMS4yOiBQQVJTRSBBTEwg Q09NTUlUIE1FU1NBR0UgVEFHUyoqClJlY29yZDoKLSBTaWduZWQtb2ZmLWJ5OiBSdWkgUWkgXDxx aXJ1aS4wMDFAYnl0ZWRhbmNlLmNvbVw+IChhdXRob3IpCi0gUmV2aWV3ZWQtYnk6IE5hbSBDYW8g XDxuYW1jYW9AbGludXRyb25peC5kZVw+Ci0gTGluazogaHR0cHM6Ly9wYXRjaC5tc2dpZC5saW5r LzIwMjYwODA2MDQzODA3LjI1ODMwMDEtMS0KICBxaXJ1aS4wMDFAYnl0ZWRhbmNlLmNvbQotIFNp Z25lZC1vZmYtYnk6IFBhdWwgV2FsbXNsZXkgXDxwandAa2VybmVsLm9yZ1w+IChSSVNDLVYgbWFp bnRhaW5lcikKLSBObyBGaXhlczogdGFnIChleHBlY3RlZCkKLSBObyBSZXBvcnRlZC1ieSAvIFRl c3RlZC1ieSAvIENjOiBzdGFibGUKLSBObyBzeXpib3QKCioqU3RlcCAxLjM6IEFOQUxZWkUgVEhF IENPTU1JVCBCT0RZIFRFWFQqKgpSZWNvcmQ6Ci0gQnVnOiBgbXVsdGlwbGVfa3Byb2Jlcy50Y2Ag cGxhbnRzIGtwcm9iZXMgb24gdGhlIGZpcnN0IDI1NgogIGAvcHJvYy9rYWxsc3ltc2AgdGV4dCBz eW1ib2xzLiBJZiBgaGFuZGxlX2JyZWFrKClgIGlzIG9uZSBvZiB0aGVtLCB0aGUKICBicmVha3Bv aW50IGV4Y2VwdGlvbiBwYXRoIGhpdHMgYW5vdGhlciBlYnJlYWsgYmVmb3JlCiAgYGtwcm9iZV9i cmVha3BvaW50X2hhbmRsZXIoKWAgcnVucy4KLSBTeW1wdG9tOiByZWN1cnNpdmUgYGRvX3RyYXBf YnJlYWsoKWAg4oaSIHN5c3RlbSB1bnJlc3BvbnNpdmUgKGhhbmcpLgotIFJvb3QgY2F1c2U6IHRo b3NlIEMgaGVscGVycyBhcmUgbm90IG9uIHRoZSBrcHJvYmUgYmxhY2tsaXN0LgotIEZpeDogYE5P S1BST0JFX1NZTUJPTCgpYCBvbiBgaGFuZGxlX2JyZWFrKClgLAogIGBwcm9iZV9icmVha3BvaW50 X2hhbmRsZXIoKWAsIGFuZCBgcHJvYmVfc2luZ2xlX3N0ZXBfaGFuZGxlcigpYC4KLSBWZXJzaW9u IGluZm86IG5vbmUgaW4gdGhlIG1lc3NhZ2UuIFRoZSBoYW5nIGlzIFJJU0MtViArIGtwcm9iZXMs IG5vdCBhCiAgbmV3LWtlcm5lbC1vbmx5IGlzc3VlLgoKKipTdGVwIDEuNDogREVURUNUIEhJRERF TiBCVUcgRklYRVMqKgpSZWNvcmQ6IE5vdCBoaWRkZW4uIFRoZSBzdWJqZWN0IHNheXMg4oCcUHJl dmVudOKAnSBhbmQgdGhlIGJvZHkgZGVzY3JpYmVzIGEKaGFuZy4gVGhpcyBpcyBhbiBleHBsaWNp dCBidWcgZml4LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClBIQVNFIDI6IERJRkYgQU5BTFlTSVMgLSBMSU5FIEJZIExJTkUK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CgoqKlN0ZXAgMi4xOiBJTlZFTlRPUlkgVEhFIENIQU5HRVMqKgpSZWNvcmQ6Ci0gRmls ZTogYGFyY2gvcmlzY3Yva2VybmVsL3RyYXBzLmNgIG9ubHkgKCszIC8g4oiSMCkKLSBGdW5jdGlv bnM6IGBwcm9iZV9zaW5nbGVfc3RlcF9oYW5kbGVyYCwgYHByb2JlX2JyZWFrcG9pbnRfaGFuZGxl cmAsCiAgYGhhbmRsZV9icmVha2AKLSBTY29wZTogc2luZ2xlLWZpbGUgc3VyZ2ljYWwgZml4Cgoq KlN0ZXAgMi4yOiBVTkRFUlNUQU5EIFRIRSBDT0RFIEZMT1cgQ0hBTkdFKioKUmVjb3JkOgotIEJl Zm9yZTogYWxsIHRocmVlIGFyZSBub3JtYWwgYC50ZXh0YCBzeW1ib2xzLiBgaGFuZGxlX2JyZWFr KClgIGlzCiAgZ2xvYmFsLCBzbyBpdCBpcyBhbHdheXMgaW4ga2FsbHN5bXMuIEEga3Byb2JlIG9u IGl0IHBhdGNoZXMgZWJyZWFrIGF0CiAgdGhlIGZ1bmN0aW9uIGVudHJ5LgotIFBhdGg6IGVicmVh ayDihpIgYGRvX3RyYXBfYnJlYWsoKWAgKG5vaW5zdHIpIOKGkiBgaGFuZGxlX2JyZWFrKClgIOKG kiBlYnJlYWsKICBhZ2FpbiDihpIgbmVzdGVkIGBkb190cmFwX2JyZWFrKClgIOKGkiBoYW5nL3N0 YWNrIGJsb3ctdXAuCiAgYGtwcm9iZV9icmVha3BvaW50X2hhbmRsZXIoKWAgaXMgbmV2ZXIgcmVh Y2hlZCBiZWNhdXNlIHRoZSB0cmFwCiAgaGFwcGVucyBhdCB0aGUgc3RhcnQgb2YgYGhhbmRsZV9i cmVhaygpYC4KLSBBZnRlcjogdGhlIHRocmVlIHN5bWJvbHMgZ28gaW4gYF9rcHJvYmVfYmxhY2ts aXN0YC4KICBgcmVnaXN0ZXJfa3Byb2JlKClgIHJlamVjdHMgdGhlbSB2aWEgYHdpdGhpbl9rcHJv YmVfYmxhY2tsaXN0KClgCiAgKGBrZXJuZWwva3Byb2Jlcy5jYCkuCgoqKlN0ZXAgMi4zOiBJREVO VElGWSBUSEUgQlVHIE1FQ0hBTklTTSoqClJlY29yZDogW0xvZ2ljIC8ga3Byb2JlIGJsYWNrbGlz dCBnYXBdIFtCcmVha3BvaW50IGV4Y2VwdGlvbiBoZWxwZXJzCndlcmUgcHJvYmVhYmxlOyBwcm9i aW5nIHRoZW0gcmVjdXJzZXMgaW50byB0aGUgc2FtZSBoYW5kbGVyLl0gQ2F0ZWdvcnkKaXMgY2xv c2VzdCB0byBhIGhhbmcvZGVhZGxvY2stY2xhc3MgZmFpbHVyZSwgbm90IFVBRi4KCioqU3RlcCAy LjQ6IEFTU0VTUyBUSEUgRklYIFFVQUxJVFkqKgpSZWNvcmQ6Ci0gT2J2aW91c2x5IGNvcnJlY3Q6 IGBOT0tQUk9CRV9TWU1CT0woKWAgaXMgdGhlIHN0YW5kYXJkIHdheSB0bwogIGJsYWNrbGlzdC4g eDg2IGRvZXMgdGhlIHNhbWUgd2l0aCBgTk9LUFJPQkVfU1lNQk9MKGRvX2ludDMpYC4gUklTQy1W CiAgYWxyZWFkeSB1c2VzIGBfX2twcm9iZXNgIG9uIGBrcHJvYmVfYnJlYWtwb2ludF9oYW5kbGVy KClgIGl0c2VsZi4KLSBNaW5pbWFsOiB0aHJlZSBhbm5vdGF0aW9uIGxpbmVzLCBubyBjb250cm9s LWZsb3cgY2hhbmdlLgotIFJlZ3Jlc3Npb24gcmlzazogdmVyeSBsb3cuIEJsYWNrbGlzdGluZyBv bmx5IHJlZnVzZXMgcHJvYmVzIG9uIHRob3NlCiAgc3ltYm9sczsgbm9ybWFsIGJyZWFrcG9pbnQv QlVHL2tnZGIgaGFuZGxpbmcgaXMgdW5jaGFuZ2VkLgotIGBsaW51eC9rcHJvYmVzLmhgIGlzIGFs cmVhZHkgaW5jbHVkZWQgaW4gYHRyYXBzLmNgLiBXaXRoCiAgYENPTkZJR19LUFJPQkVTPW5gLCBg Tk9LUFJPQkVfU1lNQk9MYCBpcyBhIG5vLW9wLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClBIQVNFIDM6IEdJVCBISVNUT1JZ IElOVkVTVElHQVRJT04KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CgoqKlN0ZXAgMy4xOiBCTEFNRSBUSEUgQ0hBTkdFRCBMSU5F UyoqClJlY29yZDoKLSBgaGFuZGxlX2JyZWFrKClgIGNyZWF0ZWQgYnkgYGYwYmRkZjUwNTg2ZGFg ICjigJxyaXNjdjogZW50cnk6IENvbnZlcnQgdG8KICBnZW5lcmljIGVudHJ54oCdLCBpbiB2Ni40 LXJjMSkuIFRoYXQgY29tbWl0ICoqcmVtb3ZlZCoqCiAgYE5PS1BST0JFX1NZTUJPTChkb190cmFw X2JyZWFrKWAgd2hlbiBzcGxpdHRpbmcgYGRvX3RyYXBfYnJlYWsoKWAgaW50bwogIGEgbm9pbnN0 ciB3cmFwcGVyIHBsdXMgYSBDIGBoYW5kbGVfYnJlYWsoKWAuCi0gV3JhcHBlcnMgYHByb2JlXypf aGFuZGxlcigpYCBhZGRlZCBieSBgOWY1NjRiOTJjZjZkMGAgKOKAnHJpc2N2OiBPbmx5CiAgY29u c2lkZXIgc3dicC9zcyBoYW5kbGVycyBmb3IgY29ycmVjdCBwcml2aWxlZ2VkIG1vZGXigJ0sIGlu IHY2LjYtcmM2KS4KLSBCb3RoIGFyZSBhbmNlc3RvcnMgb2YgdGhpcyA2LjEyIHRyZWUuCgoqKlN0 ZXAgMy4yOiBGT0xMT1cgVEhFIEZJWEVTOiBUQUcqKgpSZWNvcmQ6IE5vIEZpeGVzOiB0YWcuIFRo ZSBkcm9wcGVkIGJsYWNrbGlzdCBpcyBmcm9tIGBmMGJkZGY1MDU4NmRhYC4KRWFybGllciwgYDIz NDlhM2IyNmUyOWJgICjigJxyaXNjdjogYWRkIGRvX3BhZ2VfZmF1bHQgYW5kIGRvX3RyYXBfYnJl YWsKaW50byB0aGUga3Byb2JlcyBibGFja2xpc3TigJ0sIDIwMjEpIGFkZGVkCmBOT0tQUk9CRV9T WU1CT0woZG9fdHJhcF9icmVhaylgIHdpdGggKipDYzogc3RhYmxlKiogYW5kIEZpeGVzOgpgYzIy YjBiY2IxZGQwMmAgKOKAnHJpc2N2OiBBZGQga3Byb2JlcyBzdXBwb3J0ZWTigJ0pLiBUaGlzIHBh dGNoIHJlc3RvcmVzCnRoYXQgcHJvdGVjdGlvbiBhZnRlciB0aGUgZ2VuZXJpYy1lbnRyeSBzcGxp dC4KCioqU3RlcCAzLjM6IENIRUNLIEZJTEUgSElTVE9SWSBGT1IgUkVMQVRFRCBDSEFOR0VTKioK UmVjb3JkOiBSZWNlbnQgYHRyYXBzLmNgIGNodXJuIChpcnEgZW5hYmxlIGluIGV4Y2VwdGlvbiBo YW5kbGluZywKbWlzYWxpZ25lZCB0cmFwcykgZG9lcyBub3QgcmV0YXJnZXQgdGhlc2UgdGhyZWUg ZnVuY3Rpb25zLiBOb3QgcGFydCBvZiBhCm11bHRpLXBhdGNoIHNlcmllcyAoc3RhbmRhbG9uZSB2 MeKGknYyIHN0eWxlLW9ubHkpLiBObyBleHRyYSBwcmVyZXF1aXNpdGUKYmV5b25kIGNvZGUgYWxy ZWFkeSBpbiA2LjEyLgoKKipTdGVwIDMuNDogQ0hFQ0sgVEhFIEFVVEhPUidTIE9USEVSIENPTU1J VFMqKgpSZWNvcmQ6IFJ1aSBRaSBpcyBub3QgdGhlIFJJU0MtViBtYWludGFpbmVyLiBPbmUgb3Ro ZXIgUklTQy1WIGNvbW1pdCBpbgp0aGlzIHRyZWUgKGA4Yjc2MDEzMDM4NDc4YCwgc3RhY2t0cmFj ZSkuIFJldmlld2VyIE5hbSBDYW8gaGFzCnN1YnN0YW50aWFsIFJJU0MtViBrcHJvYmVzIHdvcmsu IE1haW50YWluZXIgUGF1bCBXYWxtc2xleSBxdWV1ZWQgdGhlCnBhdGNoLgoKKipTdGVwIDMuNTog Q0hFQ0sgRk9SIERFUEVOREVOVC9QUkVSRVFVSVNJVEUgQ09NTUlUUyoqClJlY29yZDogTm9uZS4g VXNlcyBleGlzdGluZyBgTk9LUFJPQkVfU1lNQk9MYC4gU3RhbmRhbG9uZS4gYGdpdCBhcHBseQot LWNoZWNrYCBvZiB0aGUgdGhyZWUtbGluZSBodW5rIG9uIHRoaXMgdHJlZSBzdWNjZWVkZWQgKGV4 aXQgMCkuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUEhBU0UgNDogTUFJTElORyBMSVNUIEFORCBFWFRFUk5BTCBSRVNFQVJD SAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCioqU3RlcCA0LjE6IEZJTkQgVEhFIE9SSUdJTkFMIFBBVENIIERJU0NVU1NJT04q KgpSZWNvcmQ6Ci0gYGI0IGRpZyAtYyA8bXNnaWQ+YCBmYWlsZWQ6IGNvbW1pdCBpcyBub3QgaW4g dGhpcyBjaGVja291dCAoYENhbm5vdAogIGZpbmQgYSBjb21taXQgbWF0Y2hpbmcg4oCmYCkuCi0g bG9yZS5rZXJuZWwub3JnIGZldGNoZXMgcmV0dXJuZWQgSFRUUCA0MDMuCi0gUmVjb3ZlcmVkIGZy b20gTEtNTC9wYXRjaGV3L29wZW53YWxsOgogIC0gdjE6IDIwMjYtMDgtMDQsIG1zZ2lkCiAgICBg MjAyNjA4MDQwNjQzNDMuMTg2NTI4My0xLXFpcnVpLjAwMUBieXRlZGFuY2UuY29tYAogIC0gdjI6 IDIwMjYtMDgtMDYsIG1zZ2lkCiAgICBgMjAyNjA4MDYwNDM4MDcuMjU4MzAwMS0xLXFpcnVpLjAw MUBieXRlZGFuY2UuY29tYCAoYXBwbGllZCB2ZXJzaW9uKQotIHYyIGNoYW5nZWxvZzogZHJvcCBi bGFuayBsaW5lIGJlZm9yZSBgTk9LUFJPQkVfU1lNQk9MKClgOyBhZGQgTmFtIENhbwogIFJldmll d2VkLWJ5LiBObyB0ZWNobmljYWwgcmVkZXNpZ24uCi0gUGF1bCBXYWxtc2xleTog4oCcVGhhbmtz LCBxdWV1ZWQgZm9yIHY3LjMu4oCdIE5vIE5BSy4KCioqU3RlcCA0LjI6IENIRUNLIFdITyBSRVZJ RVdFRCBUSEUgUEFUQ0gqKgpSZWNvcmQ6IHYxIENDIGluY2x1ZGVkIFBhdWwgV2FsbXNsZXksIFBh bG1lciBEYWJiZWx0LCBBbGV4YW5kcmUgR2hpdGksClRob21hcyBHbGVpeG5lciwgTmFtIENhbywg bGludXgtcmlzY3YsIGxpbnV4LWtlcm5lbC4gTmFtIENhbyBSZXZpZXdlZC1ieQpvbiB2Mi4gUklT Qy1WIG1haW50YWluZXIgYXBwbGllZCBpdC4KCioqU3RlcCA0LjM6IFNFQVJDSCBGT1IgVEhFIEJV RyBSRVBPUlQqKgpSZWNvcmQ6IE5vIGJ1Z3ppbGxhL3N5emJvdCBsaW5rLiBDb25jcmV0ZSB0cmln Z2VyIGlzIGluLXRyZWU6CmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2tw cm9iZS9tdWx0aXBsZV9rcHJvYmVzLnRjYAooZmlyc3QgMjU2IGthbGxzeW1zIHRleHQgc3ltYm9s cykuIEF1dGhvciBkZXNjcmliZXMgYSBoYW5nOyB0aGF0IG1hdGNoZXMKdGhlIGNvZGUgcGF0aC4K CioqU3RlcCA0LjQ6IENIRUNLIEZPUiBSRUxBVEVEIFBBVENIRVMgQU5EIFNFUklFUyoqClJlY29y ZDogU2luZ2xlIHBhdGNoLCBub3QgMi9OLiBObyBmb2xsb3ctdXAgcmVxdWlyZWQgZnJvbSB0aGUg djIKZGlzY3Vzc2lvbi4KCioqU3RlcCA0LjU6IENIRUNLIFNUQUJMRSBNQUlMSU5HIExJU1QgSElT VE9SWSoqClJlY29yZDogbG9yZS5rZXJuZWwub3JnL3N0YWJsZSBzZWFyY2ggcmV0dXJuZWQgNDAz LiBObyBldmlkZW5jZSB0aGlzIHdhcwpyZWplY3RlZCBmb3Igc3RhYmxlLiBUaGUgMjAyMSBwcmVk ZWNlc3NvciAoYDIzNDlhM2IyNmUyOWJgKSB3YXMKZXhwbGljaXRseSBDYzogc3RhYmxlLgoKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClBIQVNFIDU6IENPREUgU0VNQU5USUMgQU5BTFlTSVMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqKlN0ZXAgNS4xOiBJ REVOVElGWSBLRVkgRlVOQ1RJT05TIElOIFRIRSBESUZGKioKUmVjb3JkOiBgcHJvYmVfc2luZ2xl X3N0ZXBfaGFuZGxlcmAsIGBwcm9iZV9icmVha3BvaW50X2hhbmRsZXJgLApgaGFuZGxlX2JyZWFr YC4gQ2FsbGVycyBvZiBgaGFuZGxlX2JyZWFrKClgIGFyZSBvbmx5IHRoZSB0d28gYnJhbmNoZXMg b2YKYGRvX3RyYXBfYnJlYWsoKWAuCgoqKlN0ZXAgNS4yOiBUUkFDRSBDQUxMRVJTKioKUmVjb3Jk OgotIEV4Y2VwdGlvbiB2ZWN0b3IgaW4gYGFyY2gvcmlzY3Yva2VybmVsL2VudHJ5LlNgIChgUklT Q1ZfUFRSCiAgZG9fdHJhcF9icmVha2ApCi0gYGRvX3RyYXBfYnJlYWsoKWAgKG5vaW5zdHIgLyBg X190cmFwX3NlY3Rpb25gKSBhbHJlYWR5IGJsYWNrbGlzdGVkIHZpYQogIGBfX25vaW5zdHJfdGV4 dF8qYCBpbiBgcG9wdWxhdGVfa3Byb2JlX2JsYWNrbGlzdCgpYAotIGBkb190cmFwX2JyZWFrKClg IOKGkiBgaGFuZGxlX2JyZWFrKClgIChub3Qgbm9pbnN0ciwgbm90IGJsYWNrbGlzdGVkCiAgdG9k YXkpCi0gYGhhbmRsZV9icmVhaygpYCDihpIgcHJvYmUgaGVscGVycyDihpIgYGtwcm9iZV8qX2hh bmRsZXIoKWAgKGBfX2twcm9iZXNgLAogIGFscmVhZHkgYmxhY2tsaXN0ZWQpIG9yIFNJR1RSQVAv QlVHL2tnZGIKCkNvbnRleHQ6IGJyZWFrcG9pbnQgZXhjZXB0aW9uLCBpbmNsdWRpbmcga2VybmVs IGVicmVhayBmcm9tIGtwcm9iZXMuCgoqKlN0ZXAgNS4zOiBUUkFDRSBDQUxMRUVTKioKUmVjb3Jk OiBgdXNlcl9tb2RlKClgLCBgdXByb2JlXypgIC8gYGtwcm9iZV8qYCBoYW5kbGVycywKYGZvcmNl X3NpZ19mYXVsdGAsIGBub3RpZnlfZGllYCwgYHJlcG9ydF9idWdgLCBgaGFuZGxlX2NmaV9mYWls dXJlYCwKYGRpZSgpYC4gTm8gYWxsb2NhdGlvbnMgb3IgbmV3IGxvY2tzIGluIHRoZSBwYXRjaCAo YW5ub3RhdGlvbnMgb25seSkuCgoqKlN0ZXAgNS40OiBGT0xMT1cgVEhFIENBTEwgQ0hBSU4qKgpS ZWNvcmQ6IFJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0cmFjaW5nIHdoZW4gYENPTkZJR19LUFJP QkVTYCBpcyBvbjoKd3JpdGUgdG8gYGtwcm9iZV9ldmVudHNgIG9yIGVxdWl2YWxlbnQgKHR5cGlj YWxseSBDQVBfU1lTX0FETUlOIC8KQ0FQX1BFUkZNT04pLiBBbHNvIHJlYWNoYWJsZSBmcm9tIHRo ZSBmdHJhY2Uga3Byb2JlIHNlbGZ0ZXN0LiBOb3QgYQpkZWZhdWx0LWRlZmNvbmZpZyBwYXRoIChg Q09ORklHX0tQUk9CRVNgIGlzIG9wdGlvbmFsLCBSSVNDLVYgZGVmY29uZmlnCmRvZXMgbm90IHNl dCBpdCksIGJ1dCBkaXN0cm8vZGVidWcga2VybmVscyBlbmFibGUgaXQuCgoqKlN0ZXAgNS41OiBT RUFSQ0ggRk9SIFNJTUlMQVIgUEFUVEVSTlMqKgpSZWNvcmQ6IFNhbWUgcGF0dGVybiBvbiB4ODYg KGBOT0tQUk9CRV9TWU1CT0woZG9faW50MylgKSwgczM5MCwgcG93ZXJwYywKbG9vbmdhcmNoIGtw cm9iZSBoYW5kbGVycy4gUklTQy1WIGBrcHJvYmVfYnJlYWtwb2ludF9oYW5kbGVyYCBhbHJlYWR5 CnVzZXMgYF9fa3Byb2Jlc2AuIFRoZSBtaXNzaW5nIHBpZWNlIGlzIHRoZSBDIHRyYW1wb2xpbmUK YGhhbmRsZV9icmVhaygpYCwgd2hpY2ggaXMgd2hhdCBnZW5lcmljLWVudHJ5IGludHJvZHVjZWQu Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUEhBU0UgNjogQ1JPU1MtUkVGRVJFTkNJTkcgQUdBSU5TVCBUSEUgTE9DQUwgVFJF RQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCioqU3RlcCA2LjE6IERPRVMgVEhFIEJVR0dZIENPREUgRVhJU1QgSU4gVEhJUyBU UkVFPyoqClJlY29yZDogWWVzLiBgYXJjaC9yaXNjdi9rZXJuZWwvdHJhcHMuY2AgbGluZXMgMjY5 4oCTMzA1IGRlZmluZSB0aGUgdGhyZWUKZnVuY3Rpb25zIHdpdGggbm8gYE5PS1BST0JFX1NZTUJP TGAuIGBIQVZFX0tQUk9CRVNgIGlzIHNlbGVjdGVkIGZvcgpSSVNDLVYgd2hlbiBgIVhJUF9LRVJO RUxgLiBCdWcgaW50cm9kdWNlZCB3aGVuCmBOT0tQUk9CRV9TWU1CT0woZG9fdHJhcF9icmVhaylg IHdhcyBkcm9wcGVkIGluIHY2LjQgKGBmMGJkZGY1MDU4NmRhYCk7CndyYXBwZXJzIHByZXNlbnQg c2luY2UgdjYuNi4gUHJlc2VudCB0aHJvdWdob3V0IDYuMTIueS4KCioqU3RlcCA2LjI6IENIRUNL IEZPUiBCQUNLUE9SVCBDT01QTElDQVRJT05TKioKUmVjb3JkOiBDbGVhbiBhcHBseS4gTG9jYWwg YGRvX3RyYXBfYnJlYWsoKWAgaGFzIGV4dHJhCmBsb2NhbF9pcnFfZW5hYmxlL2Rpc2FibGVgIGZy b20gYDMyYjE0ZTc1NzQwNGNgLCBiZWxvdyB0aGUgaW5zZXJ0aW9uCnBvaW50cywgc28gaXQgZG9l cyBub3QgY29uZmxpY3QuIGBnaXQgYXBwbHkgLS1jaGVja2Agc3VjY2VlZGVkLgoKKipTdGVwIDYu MzogQ0hFQ0sgSUYgUkVMQVRFRCBGSVhFUyBBUkUgQUxSRUFEWSBIRVJFKioKUmVjb3JkOiBObyBg Tk9LUFJPQkVfU1lNQk9MYCBpbiBgdHJhcHMuY2Agbm93LiBgZG9fdHJhcF9icmVha2AgaXMgc3Rp bGwKbm9pbnN0ci1ibGFja2xpc3RlZCwgd2hpY2ggaXMgbm90IGVub3VnaCBiZWNhdXNlIGl0IGNh bGxzIG91dCB0bwpgaGFuZGxlX2JyZWFrKClgLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClBIQVNFIDc6IFNVQlNZU1RFTSBB TkQgTUFJTlRBSU5FUiBDT05URVhUCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKipTdGVwIDcuMTogSURFTlRJRlkgVEhFIFNV QlNZU1RFTSBBTkQgSVRTIENSSVRJQ0FMSVRZKioKUmVjb3JkOiBbYXJjaC9yaXNjdiBrcHJvYmVz L3RyYXBzXSBbSU1QT1JUQU5UIGZvciBSSVNDLVYgdHJhY2luZzsKUEVSSVBIRVJBTCByZWxhdGl2 ZSB0byBhbGwgYXJjaGl0ZWN0dXJlc10uIE5vdCBjb3JlIG1tL3NjaGVkdWxlciwgYnV0IGEKaGFu ZyBpbiB0aGUgYXJjaCBicmVha3BvaW50IHBhdGguCgoqKlN0ZXAgNy4yOiBBU1NFU1MgU1VCU1lT VEVNIEFDVElWSVRZKioKUmVjb3JkOiBSSVNDLVYgdHJhcHMva3Byb2JlcyBhcmUgbWF0dXJlIGlu IDYuMTIgKGtwcm9iZXMgc2luY2UgNS4xMykuClRoaXMgaXMgYSBsb25nLXN0YW5kaW5nIGhvbGUs IG5vdCBhIGJyYW5kLW5ldyBmZWF0dXJlIGJ1Zy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQSEFTRSA4OiBJTVBBQ1QgQU5E IFJJU0sgQVNTRVNTTUVOVAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCA4LjE6IERFVEVSTUlORSBXSE8gSVMgQUZG RUNURUQqKgpSZWNvcmQ6IFJJU0MtViBrZXJuZWxzIHdpdGggYENPTkZJR19LUFJPQkVTYCAoYW5k IG5vdCBYSVApLiBUcmFjaW5nCnVzZXJzLCBmdHJhY2Uga3Byb2JlIHNlbGZ0ZXN0cywgZGlzdHJv IGtlcm5lbHMgdGhhdCBlbmFibGUga3Byb2Jlcy4gTm90CmV2ZXJ5IDYuMTIgdXNlci4KCioqU3Rl cCA4LjI6IERFVEVSTUlORSBUSEUgVFJJR0dFUiBDT05ESVRJT05TKioKUmVjb3JkOiBQbGFudCBh IGtwcm9iZSBvbiBgaGFuZGxlX2JyZWFrYCAob3IgdGhlIHN0YXRpYyBoZWxwZXJzIGlmIHRoZXkK aGF2ZSBrYWxsc3ltcyBlbnRyaWVzKSwgdGhlbiBhbnkga2VybmVsL3VzZXIgYnJlYWtwb2ludCB0 aGF0IGVudGVycwpgaGFuZGxlX2JyZWFrKClgLiBUaGUgc2VsZnRlc3QgY2FuIGRvIHRoYXQgaWYg YGhhbmRsZV9icmVha2AgaXMgYW1vbmcKdGhlIGZpcnN0IDI1NiB0ZXh0IHN5bWJvbHMgKGFkZHJl c3Mtb3JkZXIsIHNvIHBsYXRmb3JtLWRlcGVuZGVudCkuCkV4cGxpY2l0IGBwZXJmIHByb2JlYCAv IGBrcHJvYmVfZXZlbnRzYCBvbiB0aGF0IHN5bWJvbCBpcyBhIHJlbGlhYmxlCnRyaWdnZXIuIE5l ZWRzIHRyYWNpbmcgcHJpdmlsZWdlLCBub3QgYW4gdW5wcml2aWxlZ2VkIGxvY2FsIERvUyBvbgp0 eXBpY2FsIGNvbmZpZ3MuCgoqKlN0ZXAgOC4zOiBERVRFUk1JTkUgVEhFIEZBSUxVUkUgTU9ERSBT RVZFUklUWSoqClJlY29yZDogW1JlY3Vyc2l2ZSBicmVha3BvaW50IGV4Y2VwdGlvbiDihpIgaGFu ZyAvIHVucmVzcG9uc2l2ZSBzeXN0ZW1dCltDUklUSUNBTCBmb3IgdGhvc2Ugd2hvIGhpdCBpdF0u IE5vdCBkYXRhIGNvcnJ1cHRpb24uIE5vdCBhbgp1bnByaXZpbGVnZWQgc2VjdXJpdHkgYnVnIG9u IHR5cGljYWwga3Byb2JlIHBvbGljeS4KCioqU3RlcCA4LjQ6IENBTENVTEFURSBSSVNLLUJFTkVG SVQgUkFUSU8qKgpSZWNvcmQ6Ci0gQmVuZWZpdDogSElHSCBmb3IgUklTQy1WIGtwcm9iZSB1c2Vy cyAocHJldmVudHMgaGFuZzsgcmVzdG9yZXMKICBibGFja2xpc3QgdGhhdCBzdGFibGUgYWxyZWFk eSBzaGlwcGVkIG9uY2UpLgotIFJpc2s6IFZFUlkgTE9XICgzIGFubm90YXRpb24gbGluZXMsIG5v IHJ1bnRpbWUgbG9naWMgY2hhbmdlKS4KLSBSYXRpbzogc3Ryb25nbHkgZmF2b3JzIGJhY2twb3J0 LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClBIQVNFIDk6IEZJTkFMIFNZTlRIRVNJUwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCA5LjE6IENP TVBJTEUgVEhFIEVWSURFTkNFKioKCkZPUjoKLSBSZWFsIGhhbmc6IHJlY3Vyc2l2ZSBlYnJlYWsg aW4gdGhlIGJyZWFrcG9pbnQgcGF0aC4KLSBJbi10cmVlIHNlbGZ0ZXN0IGlzIGEgcGxhdXNpYmxl IHRyaWdnZXI7IGFueSBwcm9iZSBvbiBgaGFuZGxlX2JyZWFrYAogIGlzIGEgaGFyZCB0cmlnZ2Vy LgotIFJlc3RvcmVzIHByb3RlY3Rpb24gdGhhdCBgMjM0OWEzYjI2ZTI5YmAgcHV0IG9uIGBkb190 cmFwX2JyZWFrYCAoQ2M6CiAgc3RhYmxlKSBhbmQgdGhhdCBgZjBiZGRmNTA1ODZkYWAgZHJvcHBl ZC4KLSBNYXRjaGVzIG90aGVyIGFyY2hpdGVjdHVyZXPigJkgbm9rcHJvYmUgb24gbG93LWxldmVs IEJQIGhhbmRsZXJzLgotIDMgbGluZXMsIG9idmlvdXNseSBjb3JyZWN0LCByZXZpZXdlZCBieSBO YW0gQ2FvLCBxdWV1ZWQgYnkgUGF1bAogIFdhbG1zbGV5LgotIEJ1Z2d5IGNvZGUgaXMgaW4gdGhp cyA2LjEyIHRyZWU7IHBhdGNoIGFwcGxpZXMgY2xlYW5seS4KCkFHQUlOU1Q6Ci0gTm90IG9uIGJ5 IGRlZmF1bHQgaW4gUklTQy1WIGRlZmNvbmZpZyAoYENPTkZJR19LUFJPQkVTYCBvcHRpb25hbCku Ci0gTmVlZHMgcHJpdmlsZWdlZCB0cmFjaW5nIHRvIHRyaWdnZXIuCi0gTm8gRml4ZXM6L0NjOiBz dGFibGUgb24gdGhpcyBjb21taXQgKG5vdCBhIG5lZ2F0aXZlIHBlciB0aGUgcmV2aWV3CiAgcnVs ZXMpLgotIEFyY2gtc3BlY2lmaWMsIHNvIG9ubHkgUklTQy1WIDYuMTIgdXNlcnMgYmVuZWZpdC4K ClVOUkVTT0xWRUQ6Ci0gRXhhY3QgTmFtIENhbyByZXZpZXcgZW1haWwgYm9keSAobG9yZSA0MDMp LiB2MiBvbmx5IGNoYW5nZWQgd2hpdGVzcGFjZQogIGFuZCBhZGRlZCBSZXZpZXdlZC1ieS4KLSBX aGV0aGVyIGBoYW5kbGVfYnJlYWtgIGlzIGluIHRoZSBmaXJzdCAyNTYga2FsbHN5bXMgb24gYSB0 eXBpY2FsIDYuMTIKICBSSVNDLVYgdm1saW51eCAodW52ZXJpZmllZDsgaGFuZyBpZiBwcm9iZWQg aXMgdmVyaWZpZWQgZnJvbSBjb2RlCiAgcmVnYXJkbGVzcykuCi0gYGI0IGRpZ2AgY291bGQgbm90 IHJ1biBhZ2FpbnN0IGEgU0hBIG5vdCBpbiB0aGlzIGNoZWNrb3V0LgoKKipTdGVwIDkuMjogQVBQ TFkgVEhFIFNUQUJMRSBSVUxFUyBDSEVDS0xJU1QqKgoxLiBPYnZpb3VzbHkgY29ycmVjdCBhbmQg dGVzdGVkPyAqKlBBU1MqKiDigJQgc3RhbmRhcmQgYE5PS1BST0JFX1NZTUJPTGA7CiAgIG1haW50 YWluZXIgcXVldWVkOyByZXZpZXdlciBBY2suCjIuIEZpeGVzIGEgcmVhbCBidWcgdGhhdCBhZmZl Y3RzIHVzZXJzPyAqKlBBU1MqKiDigJQgaGFuZyB3aGVuIGtwcm9iZXMKICAgbGFuZHMgb24gYGhh bmRsZV9icmVha2AuCjMuIEltcG9ydGFudCBpc3N1ZSAoY3Jhc2gsIHNlY3VyaXR5LCBjb3JydXB0 aW9uLCBkZWFkbG9jayk/ICoqUEFTUyoqIOKAlAogICBzeXN0ZW0gaGFuZyAvIHVucmVzcG9uc2l2 ZS4KNC4gU21hbGwgYW5kIGNvbnRhaW5lZD8gKipQQVNTKiog4oCUICszIGxpbmVzLCBvbmUgZmls ZS4KNS4gTm8gbmV3IGZlYXR1cmVzIG9yIEFQSXM/ICoqUEFTUyoqCjYuIENhbiBhcHBseSB0byB0 aGUgbG9jYWwgdHJlZT8gKipQQVNTKiog4oCUIGBnaXQgYXBwbHkgLS1jaGVja2AgY2xlYW4gb24K ICAgNi4xMi4xMTEuCgoqKlN0ZXAgOS4zOiBDSEVDSyBGT1IgRVhDRVBUSU9OIENBVEVHT1JJRVMq KgpSZWNvcmQ6IE5vdCBhIGRldmljZS1JRC9xdWlyay9EVC9idWlsZC9kb2NzIGV4Y2VwdGlvbi4g SXQgaXMgYSBub3JtYWwKaGFuZyBmaXguCgoqKlN0ZXAgOS40OiBNQUtFIFlPVVIgREVDSVNJT04q KgpUaGlzIGJlbG9uZ3Mgb24gNi4xMi55LiBJdCByZXN0b3JlcyBhIGtwcm9iZSBibGFja2xpc3Qg dGhhdCB0aGlzIHRyZWUKbG9zdCBpbiB0aGUgZ2VuZXJpYy1lbnRyeSBzcGxpdCwgd2l0aCBlc3Nl bnRpYWxseSBubyBiZWhhdmlvcmFsIGNoYW5nZQpleGNlcHQgcmVmdXNpbmcgcHJvYmVzIHRoYXQg Y2FuIHdlZGdlIHRoZSBtYWNoaW5lLgoKRGV0YWlsZWQgZXhwbGFuYXRpb246ClRoZSBwcm9ibGVt IGlzIHRoYXQgUklTQy1WIGtwcm9iZXMgaW1wbGVtZW50IHNvZnR3YXJlIGJyZWFrcG9pbnRzIHdp dGgKZWJyZWFrLiBgZG9fdHJhcF9icmVhaygpYCBpcyBub2luc3RyIChhbHJlYWR5IGJsYWNrbGlz dGVkKSwgYnV0IGl0CmltbWVkaWF0ZWx5IGNhbGxzIGBoYW5kbGVfYnJlYWsoKWAsIHdoaWNoIGlz IG9yZGluYXJ5IEMgdGV4dC4gSWYgYQprcHJvYmUgaXMgaW5zdGFsbGVkIG9uIGBoYW5kbGVfYnJl YWsoKWAsIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBpcwplYnJlYWssIHNvIHRoZSBleGNlcHRpb24g cGF0aCB0cmFwcyBhZ2FpbiBiZWZvcmUKYGtwcm9iZV9icmVha3BvaW50X2hhbmRsZXIoKWAgY2Fu IHJ1bi4gVGhhdCByZWN1cnNlcyB1bnRpbCB0aGUgc3lzdGVtCnN0b3BzIHJlc3BvbmRpbmcuIE1h cmtpbmcgdGhlIHRocmVlIHN5bWJvbHMgYE5PS1BST0JFX1NZTUJPTGAgcHV0cyB0aGVtCm9uIHRo ZSBzYW1lIGJsYWNrbGlzdCBgcmVnaXN0ZXJfa3Byb2JlKClgIGFscmVhZHkgY29uc3VsdHMuIFN0 YWJsZSB1c2Vycwp3aG8gZW5hYmxlIGtwcm9iZXMgKHRyYWNpbmcsIHNlbGZ0ZXN0cywgZGlzdHJv IGRlYnVnIGtlcm5lbHMpIGFyZSB0aGUKb25lcyB3aG8gaGl0IHRoaXM7IHRoZSBjb3N0IG9mIHRo ZSBiYWNrcG9ydCBpcyB0aHJlZSBhbm5vdGF0aW9ucy4KClZlcmlmaWNhdGlvbjoKLSBbUGhhc2Ug MV0gUGFyc2VkIHRhZ3M6IFJldmlld2VkLWJ5IE5hbSBDYW87IExpbmsgbXNnaWQKICAyMDI2MDgw NjA0MzgwNy4yNTgzMDAxLTE7IFBhdWwgV2FsbXNsZXkgU09COyBubyBGaXhlcy9zeXpib3QKLSBb UGhhc2UgMl0gRGlmZjogKzMgYE5PS1BST0JFX1NZTUJPTGAgbGluZXMgaW4KICBgYXJjaC9yaXNj di9rZXJuZWwvdHJhcHMuY2A7IG5vIGNvbnRyb2wtZmxvdyBjaGFuZ2UKLSBbUGhhc2UgMl0gQ29u ZmlybWVkIGB0cmFwcy5jYCBhbHJlYWR5IGAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPmAKLSBb UGhhc2UgMl0gQ29uZmlybWVkIGByZWdpc3Rlcl9rcHJvYmUoKWAgcmVqZWN0cwogIGB3aXRoaW5f a3Byb2JlX2JsYWNrbGlzdCgpYCBhZGRyZXNzZXMgKGBrZXJuZWwva3Byb2Jlcy5jYCB+MTU5MykK LSBbUGhhc2UgMl0gQ29uZmlybWVkIGBOT0tQUk9CRV9TWU1CT0xgIHdyaXRlcyBgX2twcm9iZV9i bGFja2xpc3RgCiAgKGBpbmNsdWRlL2FzbS1nZW5lcmljL2twcm9iZXMuaGApCi0gW1BoYXNlIDNd IGBnaXQgZGVzY3JpYmUgSEVBRGAgLyBgbWFrZSBrZXJuZWx2ZXJzaW9uYDoKICBwLTYuMTItMy1n YzUwNGNmMGJhYTNkOCwgNi4xMi4xMTEKLSBbUGhhc2UgM10gYmxhbWU6IGBoYW5kbGVfYnJlYWtg IGZyb20gYGYwYmRkZjUwNTg2ZGFgICh2Ni40LXJjMSk7CiAgd3JhcHBlcnMgZnJvbSBgOWY1NjRi OTJjZjZkMGAgKHY2LjYtcmM2KQotIFtQaGFzZSAzXSBgZ2l0IHNob3cgZjBiZGRmNTA1ODZkYWA6 IHJlbW92ZWQKICBgTk9LUFJPQkVfU1lNQk9MKGRvX3RyYXBfYnJlYWspYCB3aGlsZSBzcGxpdHRp bmcgdGhlIGZ1bmN0aW9uCi0gW1BoYXNlIDNdIGAyMzQ5YTNiMjZlMjliYCBvcmlnaW5hbGx5IGJs YWNrbGlzdGVkIGBkb190cmFwX2JyZWFrYCB3aXRoCiAgQ2M6IHN0YWJsZQotIFtQaGFzZSAzXSBg Z2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvcmAgYm90aCBpbnRyb2R1Y2luZyBjb21taXRzIGFy ZQogIGluIEhFQUQKLSBbUGhhc2UgNF0gYjQgZGlnOiBubyBtYXRjaGluZyBjb21taXQgaW4gdGhp cyB0cmVlIChVTlZFUklGSUVEIHZpYSBiNCkKLSBbUGhhc2UgNF0gdjEvdjIgcmVjb3ZlcmVkIGZy b20gbGttbC5pdS5lZHUgLyBvcGVud2FsbCAvIHBhdGNoZXc7IHYyIGlzCiAgc3R5bGUtb25seSAr IFJldmlld2VkLWJ5Ci0gW1BoYXNlIDRdIFBhdWwgV2FsbXNsZXk6IHF1ZXVlZCBmb3IgdjcuMyAo cGF0Y2hldykKLSBbUGhhc2UgNF0gbG9yZS5rZXJuZWwub3JnIGFuZCBzdGFibGVAIHNlYXJjaDog SFRUUCA0MDMgKFVOVkVSSUZJRUQgdmlhCiAgbG9yZSkKLSBbUGhhc2UgNF0gTmFtIENhbyByZXZp ZXcgYm9keTogVU5WRVJJRklFRCAob3BlbndhbGwgbXNnIGlkIGNvbGxpc2lvbik7CiAgUmV2aWV3 ZWQtYnkgb24gdjIgaXMgdmVyaWZpZWQKLSBbUGhhc2UgNV0gQ2FsbGVyczogYGVudHJ5LlNgIOKG kiBgZG9fdHJhcF9icmVha2Ag4oaSIGBoYW5kbGVfYnJlYWtgOwogIGBkb190cmFwX2JyZWFrYCBp cyBgX190cmFwX3NlY3Rpb25gL2Bub2luc3RyYAotIFtQaGFzZSA1XSBga3Byb2JlX2JyZWFrcG9p bnRfaGFuZGxlcmAgYWxyZWFkeSBgX19rcHJvYmVzYCBpbgogIGBhcmNoL3Jpc2N2L2tlcm5lbC9w cm9iZXMva3Byb2Jlcy5jYAotIFtQaGFzZSA1XSBTZWxmdGVzdCBgbXVsdGlwbGVfa3Byb2Jlcy50 Y2AgY29uZmlybWVkIHRvIHRha2UgZmlyc3QgMjU2CiAga2FsbHN5bXMgdGV4dCBzeW1ib2xzCi0g W1BoYXNlIDVdIHg4NiBjb21wYXJpc29uOiBgTk9LUFJPQkVfU1lNQk9MKGRvX2ludDMpYCBpbgog IGBhcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYzo4MjZgCi0gW1BoYXNlIDZdIEN1cnJlbnQgYHRyYXBz LmNgIGhhcyBubyBgTk9LUFJPQkVfU1lNQk9MYDsgYnVnZ3kgaGVscGVycwogIHByZXNlbnQgYXQg bGluZXMgMjY54oCTMzA1Ci0gW1BoYXNlIDZdIGBnaXQgYXBwbHkgLS1jaGVja2Agb2YgdGhlIHRo cmVlLWxpbmUgaHVuazogZXhpdCAwCi0gW1BoYXNlIDddIGBhcmNoL3Jpc2N2L0tjb25maWdgOiBg c2VsZWN0IEhBVkVfS1BST0JFUyBpZiAhWElQX0tFUk5FTGAKLSBbUGhhc2UgOF0gUklTQy1WIGRl ZmNvbmZpZyBkb2VzIG5vdCBzZXQgYENPTkZJR19LUFJPQkVTYCAodHJpZ2dlciBpcwogIGNvbmZp Zy1zcGVjaWZpYykKLSBVTlZFUklGSUVEOiB3aGV0aGVyIGBoYW5kbGVfYnJlYWtgIGlzIGluIHRo ZSBmaXJzdCAyNTYga2FsbHN5bXMgb24gYQogIHR5cGljYWwgNi4xMiBSSVNDLVYgYnVpbGQgKGRv ZXMgbm90IGNoYW5nZSB0aGUgaGFuZyBpZiB0aGF0IHN5bWJvbCBpcwogIHByb2JlZCkKCioqWUVT KioKCiBhcmNoL3Jpc2N2L2tlcm5lbC90cmFwcy5jIHwgMyArKysKIDEgZmlsZSBjaGFuZ2VkLCAz IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC90cmFwcy5jIGIv YXJjaC9yaXNjdi9rZXJuZWwvdHJhcHMuYwppbmRleCA0N2FmZWE0ZmYxYThkLi5lN2U0NWNiYjA4 OTk5IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcmlz Y3Yva2VybmVsL3RyYXBzLmMKQEAgLTI3Miw2ICsyNzIsNyBAQCBzdGF0aWMgYm9vbCBwcm9iZV9z aW5nbGVfc3RlcF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCiAJcmV0dXJuIHVzZXIg PyB1cHJvYmVfc2luZ2xlX3N0ZXBfaGFuZGxlcihyZWdzKSA6IGtwcm9iZV9zaW5nbGVfc3RlcF9o YW5kbGVyKHJlZ3MpOwogfQorTk9LUFJPQkVfU1lNQk9MKHByb2JlX3NpbmdsZV9zdGVwX2hhbmRs ZXIpOwogCiBzdGF0aWMgYm9vbCBwcm9iZV9icmVha3BvaW50X2hhbmRsZXIoc3RydWN0IHB0X3Jl Z3MgKnJlZ3MpCiB7CkBAIC0yNzksNiArMjgwLDcgQEAgc3RhdGljIGJvb2wgcHJvYmVfYnJlYWtw b2ludF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCiAJcmV0dXJuIHVzZXIgPyB1cHJv YmVfYnJlYWtwb2ludF9oYW5kbGVyKHJlZ3MpIDoga3Byb2JlX2JyZWFrcG9pbnRfaGFuZGxlcihy ZWdzKTsKIH0KK05PS1BST0JFX1NZTUJPTChwcm9iZV9icmVha3BvaW50X2hhbmRsZXIpOwogCiB2 b2lkIGhhbmRsZV9icmVhayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTMwMyw2ICszMDUs NyBAQCB2b2lkIGhhbmRsZV9icmVhayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAllbHNlCiAJCWRp ZShyZWdzLCAiS2VybmVsIEJVRyIpOwogfQorTk9LUFJPQkVfU1lNQk9MKGhhbmRsZV9icmVhayk7 CiAKIGFzbWxpbmthZ2UgX192aXNpYmxlIF9fdHJhcF9zZWN0aW9uIHZvaWQgZG9fdHJhcF9icmVh ayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLS0gCjIuNTMuMAoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdAps aW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 DAAB85CFA37; Mon, 19 Oct 2026 14:01:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792418484; cv=none; b=kLYAjqo5784R8ubfc/m6BSFN40u214WmTO+tGpJBei9/13La6tp5ZMIctQwNPPYqi3Z2swfuEaWSVKazXvWtmmJBXR+tJPFPbs6hpA3m436oqqtXoG2KDXGmNazAOvDtQZhEZBVphUkyNyGUN7j5Vy13bkIaluzeODFv4etBwtA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792418484; c=relaxed/simple; bh=HToFgVlhuGaEadTfI7X7GKcr0QHuQ8RmEuqX3C3o0wU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CWcCDwHl4CZ5KbdyU8FJmUsMo7Zdbd/WN8aNjbsMhPLLwG1jXX4+1o2fD8hJOLaUsZUrbqeVmYYivC4cus1m3F7Y3WFdj3CCjoQJpDTOrRAMQJRYOrtT5V2PyaSQImnD+FuJOz3Qzs6Qs5qumjioEj6fzz2RZ3B7+WL9aMDoVPg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OIEf7OWB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OIEf7OWB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E2991F000C7; Mon, 19 Oct 2026 14:01:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418481; bh=gBlviaq2Bd1jxA4rhzos6vfoZby6wGFF0L4p6Ivg+2I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OIEf7OWBonhlFXBGqPTKSHJJN7/2RtkRSruw26RcyUNvIFj8eG1829evIbJ2RETxi eKlRsBclVAEWb31SoglLyvWUxMApgjXpZu8PY9C4l4uLOoyqPDQa0uvfCRYG8dd7Dr qMTe8ksrYEaUGMCEnxuDeOY7ntf5adHgReJESW4oL8/wh8Ser+U6goqYzhItfY4RIW 3KF+eEwGD4NgaWvqGuO26pu7TV0s2j9OTEkJVNWvdmf/0nvyEr/UCqQ91khOK9ia5F b+JxEbFto6KQLkjQ7nPi7jZ0njM88Bg/Kvelmy8E6YT62+qFkq5uvvj8hHR0t5lWTX cBTPNpuhIQ2Jg== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Rui Qi , Nam Cao , Paul Walmsley , Sasha Levin , palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-6.6] riscv: kprobes: Prevent probes in breakpoint handlers Date: Mon, 19 Oct 2026 09:49:30 -0400 Message-ID: <20261019135441.1420968-279-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Rui Qi [ Upstream commit e7d8ea6c6d1bc685a8943ffad2d3679be92d164f ] The ftrace selftest multiple_kprobes.tc registers kprobe events on the first 256 text symbols from /proc/kallsyms. If handle_break() is selected as a probe target on RISC-V, the breakpoint exception path can trap again before it reaches the kprobe breakpoint handler. That recursively enters do_trap_break() and can make the system unresponsive. Mark handle_break() and its local probe dispatch helpers as nokprobe symbols so they are added to the kprobe blacklist, matching other low-level breakpoint exception paths. Signed-off-by: Rui Qi Reviewed-by: Nam Cao Link: https://patch.msgid.link/20260806043807.2583001-1-qirui.001@bytedance.com Signed-off-by: Paul Walmsley Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: This is a 3-line RISC-V kprobe blacklist restore that prevents recursive breakpoint traps from hanging the machine. The local tree is **6.12.111** (`pending-6.12`); the buggy `handle_break()` path is present and the patch applies cleanly. =============================================================== PHASE 1: COMMIT MESSAGE FORENSICS =============================================================== **Step 1.1: PARSE THE SUBJECT LINE** Record: [riscv: kprobes] [Prevent] [Stop kprobes on RISC-V breakpoint exception handlers so a probe on that path cannot recurse] **Step 1.2: PARSE ALL COMMIT MESSAGE TAGS** Record: - Signed-off-by: Rui Qi \ (author) - Reviewed-by: Nam Cao \ - Link: https://patch.msgid.link/20260806043807.2583001-1- qirui.001@bytedance.com - Signed-off-by: Paul Walmsley \ (RISC-V maintainer) - No Fixes: tag (expected) - No Reported-by / Tested-by / Cc: stable - No syzbot **Step 1.3: ANALYZE THE COMMIT BODY TEXT** Record: - Bug: `multiple_kprobes.tc` plants kprobes on the first 256 `/proc/kallsyms` text symbols. If `handle_break()` is one of them, the breakpoint exception path hits another ebreak before `kprobe_breakpoint_handler()` runs. - Symptom: recursive `do_trap_break()` → system unresponsive (hang). - Root cause: those C helpers are not on the kprobe blacklist. - Fix: `NOKPROBE_SYMBOL()` on `handle_break()`, `probe_breakpoint_handler()`, and `probe_single_step_handler()`. - Version info: none in the message. The hang is RISC-V + kprobes, not a new-kernel-only issue. **Step 1.4: DETECT HIDDEN BUG FIXES** Record: Not hidden. The subject says “Prevent” and the body describes a hang. This is an explicit bug fix. =============================================================== PHASE 2: DIFF ANALYSIS - LINE BY LINE =============================================================== **Step 2.1: INVENTORY THE CHANGES** Record: - File: `arch/riscv/kernel/traps.c` only (+3 / −0) - Functions: `probe_single_step_handler`, `probe_breakpoint_handler`, `handle_break` - Scope: single-file surgical fix **Step 2.2: UNDERSTAND THE CODE FLOW CHANGE** Record: - Before: all three are normal `.text` symbols. `handle_break()` is global, so it is always in kallsyms. A kprobe on it patches ebreak at the function entry. - Path: ebreak → `do_trap_break()` (noinstr) → `handle_break()` → ebreak again → nested `do_trap_break()` → hang/stack blow-up. `kprobe_breakpoint_handler()` is never reached because the trap happens at the start of `handle_break()`. - After: the three symbols go in `_kprobe_blacklist`. `register_kprobe()` rejects them via `within_kprobe_blacklist()` (`kernel/kprobes.c`). **Step 2.3: IDENTIFY THE BUG MECHANISM** Record: [Logic / kprobe blacklist gap] [Breakpoint exception helpers were probeable; probing them recurses into the same handler.] Category is closest to a hang/deadlock-class failure, not UAF. **Step 2.4: ASSESS THE FIX QUALITY** Record: - Obviously correct: `NOKPROBE_SYMBOL()` is the standard way to blacklist. x86 does the same with `NOKPROBE_SYMBOL(do_int3)`. RISC-V already uses `__kprobes` on `kprobe_breakpoint_handler()` itself. - Minimal: three annotation lines, no control-flow change. - Regression risk: very low. Blacklisting only refuses probes on those symbols; normal breakpoint/BUG/kgdb handling is unchanged. - `linux/kprobes.h` is already included in `traps.c`. With `CONFIG_KPROBES=n`, `NOKPROBE_SYMBOL` is a no-op. =============================================================== PHASE 3: GIT HISTORY INVESTIGATION =============================================================== **Step 3.1: BLAME THE CHANGED LINES** Record: - `handle_break()` created by `f0bddf50586da` (“riscv: entry: Convert to generic entry”, in v6.4-rc1). That commit **removed** `NOKPROBE_SYMBOL(do_trap_break)` when splitting `do_trap_break()` into a noinstr wrapper plus a C `handle_break()`. - Wrappers `probe_*_handler()` added by `9f564b92cf6d0` (“riscv: Only consider swbp/ss handlers for correct privileged mode”, in v6.6-rc6). - Both are ancestors of this 6.12 tree. **Step 3.2: FOLLOW THE FIXES: TAG** Record: No Fixes: tag. The dropped blacklist is from `f0bddf50586da`. Earlier, `2349a3b26e29b` (“riscv: add do_page_fault and do_trap_break into the kprobes blacklist”, 2021) added `NOKPROBE_SYMBOL(do_trap_break)` with **Cc: stable** and Fixes: `c22b0bcb1dd02` (“riscv: Add kprobes supported”). This patch restores that protection after the generic-entry split. **Step 3.3: CHECK FILE HISTORY FOR RELATED CHANGES** Record: Recent `traps.c` churn (irq enable in exception handling, misaligned traps) does not retarget these three functions. Not part of a multi-patch series (standalone v1→v2 style-only). No extra prerequisite beyond code already in 6.12. **Step 3.4: CHECK THE AUTHOR'S OTHER COMMITS** Record: Rui Qi is not the RISC-V maintainer. One other RISC-V commit in this tree (`8b76013038478`, stacktrace). Reviewer Nam Cao has substantial RISC-V kprobes work. Maintainer Paul Walmsley queued the patch. **Step 3.5: CHECK FOR DEPENDENT/PREREQUISITE COMMITS** Record: None. Uses existing `NOKPROBE_SYMBOL`. Standalone. `git apply --check` of the three-line hunk on this tree succeeded (exit 0). =============================================================== PHASE 4: MAILING LIST AND EXTERNAL RESEARCH =============================================================== **Step 4.1: FIND THE ORIGINAL PATCH DISCUSSION** Record: - `b4 dig -c ` failed: commit is not in this checkout (`Cannot find a commit matching …`). - lore.kernel.org fetches returned HTTP 403. - Recovered from LKML/patchew/openwall: - v1: 2026-08-04, msgid `20260804064343.1865283-1-qirui.001@bytedance.com` - v2: 2026-08-06, msgid `20260806043807.2583001-1-qirui.001@bytedance.com` (applied version) - v2 changelog: drop blank line before `NOKPROBE_SYMBOL()`; add Nam Cao Reviewed-by. No technical redesign. - Paul Walmsley: “Thanks, queued for v7.3.” No NAK. **Step 4.2: CHECK WHO REVIEWED THE PATCH** Record: v1 CC included Paul Walmsley, Palmer Dabbelt, Alexandre Ghiti, Thomas Gleixner, Nam Cao, linux-riscv, linux-kernel. Nam Cao Reviewed-by on v2. RISC-V maintainer applied it. **Step 4.3: SEARCH FOR THE BUG REPORT** Record: No bugzilla/syzbot link. Concrete trigger is in-tree: `tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc` (first 256 kallsyms text symbols). Author describes a hang; that matches the code path. **Step 4.4: CHECK FOR RELATED PATCHES AND SERIES** Record: Single patch, not 2/N. No follow-up required from the v2 discussion. **Step 4.5: CHECK STABLE MAILING LIST HISTORY** Record: lore.kernel.org/stable search returned 403. No evidence this was rejected for stable. The 2021 predecessor (`2349a3b26e29b`) was explicitly Cc: stable. =============================================================== PHASE 5: CODE SEMANTIC ANALYSIS =============================================================== **Step 5.1: IDENTIFY KEY FUNCTIONS IN THE DIFF** Record: `probe_single_step_handler`, `probe_breakpoint_handler`, `handle_break`. Callers of `handle_break()` are only the two branches of `do_trap_break()`. **Step 5.2: TRACE CALLERS** Record: - Exception vector in `arch/riscv/kernel/entry.S` (`RISCV_PTR do_trap_break`) - `do_trap_break()` (noinstr / `__trap_section`) already blacklisted via `__noinstr_text_*` in `populate_kprobe_blacklist()` - `do_trap_break()` → `handle_break()` (not noinstr, not blacklisted today) - `handle_break()` → probe helpers → `kprobe_*_handler()` (`__kprobes`, already blacklisted) or SIGTRAP/BUG/kgdb Context: breakpoint exception, including kernel ebreak from kprobes. **Step 5.3: TRACE CALLEES** Record: `user_mode()`, `uprobe_*` / `kprobe_*` handlers, `force_sig_fault`, `notify_die`, `report_bug`, `handle_cfi_failure`, `die()`. No allocations or new locks in the patch (annotations only). **Step 5.4: FOLLOW THE CALL CHAIN** Record: Reachable from userspace tracing when `CONFIG_KPROBES` is on: write to `kprobe_events` or equivalent (typically CAP_SYS_ADMIN / CAP_PERFMON). Also reachable from the ftrace kprobe selftest. Not a default-defconfig path (`CONFIG_KPROBES` is optional, RISC-V defconfig does not set it), but distro/debug kernels enable it. **Step 5.5: SEARCH FOR SIMILAR PATTERNS** Record: Same pattern on x86 (`NOKPROBE_SYMBOL(do_int3)`), s390, powerpc, loongarch kprobe handlers. RISC-V `kprobe_breakpoint_handler` already uses `__kprobes`. The missing piece is the C trampoline `handle_break()`, which is what generic-entry introduced. =============================================================== PHASE 6: CROSS-REFERENCING AGAINST THE LOCAL TREE =============================================================== **Step 6.1: DOES THE BUGGY CODE EXIST IN THIS TREE?** Record: Yes. `arch/riscv/kernel/traps.c` lines 269–305 define the three functions with no `NOKPROBE_SYMBOL`. `HAVE_KPROBES` is selected for RISC-V when `!XIP_KERNEL`. Bug introduced when `NOKPROBE_SYMBOL(do_trap_break)` was dropped in v6.4 (`f0bddf50586da`); wrappers present since v6.6. Present throughout 6.12.y. **Step 6.2: CHECK FOR BACKPORT COMPLICATIONS** Record: Clean apply. Local `do_trap_break()` has extra `local_irq_enable/disable` from `32b14e757404c`, below the insertion points, so it does not conflict. `git apply --check` succeeded. **Step 6.3: CHECK IF RELATED FIXES ARE ALREADY HERE** Record: No `NOKPROBE_SYMBOL` in `traps.c` now. `do_trap_break` is still noinstr-blacklisted, which is not enough because it calls out to `handle_break()`. =============================================================== PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT =============================================================== **Step 7.1: IDENTIFY THE SUBSYSTEM AND ITS CRITICALITY** Record: [arch/riscv kprobes/traps] [IMPORTANT for RISC-V tracing; PERIPHERAL relative to all architectures]. Not core mm/scheduler, but a hang in the arch breakpoint path. **Step 7.2: ASSESS SUBSYSTEM ACTIVITY** Record: RISC-V traps/kprobes are mature in 6.12 (kprobes since 5.13). This is a long-standing hole, not a brand-new feature bug. =============================================================== PHASE 8: IMPACT AND RISK ASSESSMENT =============================================================== **Step 8.1: DETERMINE WHO IS AFFECTED** Record: RISC-V kernels with `CONFIG_KPROBES` (and not XIP). Tracing users, ftrace kprobe selftests, distro kernels that enable kprobes. Not every 6.12 user. **Step 8.2: DETERMINE THE TRIGGER CONDITIONS** Record: Plant a kprobe on `handle_break` (or the static helpers if they have kallsyms entries), then any kernel/user breakpoint that enters `handle_break()`. The selftest can do that if `handle_break` is among the first 256 text symbols (address-order, so platform-dependent). Explicit `perf probe` / `kprobe_events` on that symbol is a reliable trigger. Needs tracing privilege, not an unprivileged local DoS on typical configs. **Step 8.3: DETERMINE THE FAILURE MODE SEVERITY** Record: [Recursive breakpoint exception → hang / unresponsive system] [CRITICAL for those who hit it]. Not data corruption. Not an unprivileged security bug on typical kprobe policy. **Step 8.4: CALCULATE RISK-BENEFIT RATIO** Record: - Benefit: HIGH for RISC-V kprobe users (prevents hang; restores blacklist that stable already shipped once). - Risk: VERY LOW (3 annotation lines, no runtime logic change). - Ratio: strongly favors backport. =============================================================== PHASE 9: FINAL SYNTHESIS =============================================================== **Step 9.1: COMPILE THE EVIDENCE** FOR: - Real hang: recursive ebreak in the breakpoint path. - In-tree selftest is a plausible trigger; any probe on `handle_break` is a hard trigger. - Restores protection that `2349a3b26e29b` put on `do_trap_break` (Cc: stable) and that `f0bddf50586da` dropped. - Matches other architectures’ nokprobe on low-level BP handlers. - 3 lines, obviously correct, reviewed by Nam Cao, queued by Paul Walmsley. - Buggy code is in this 6.12 tree; patch applies cleanly. AGAINST: - Not on by default in RISC-V defconfig (`CONFIG_KPROBES` optional). - Needs privileged tracing to trigger. - No Fixes:/Cc: stable on this commit (not a negative per the review rules). - Arch-specific, so only RISC-V 6.12 users benefit. UNRESOLVED: - Exact Nam Cao review email body (lore 403). v2 only changed whitespace and added Reviewed-by. - Whether `handle_break` is in the first 256 kallsyms on a typical 6.12 RISC-V vmlinux (unverified; hang if probed is verified from code regardless). - `b4 dig` could not run against a SHA not in this checkout. **Step 9.2: APPLY THE STABLE RULES CHECKLIST** 1. Obviously correct and tested? **PASS** — standard `NOKPROBE_SYMBOL`; maintainer queued; reviewer Ack. 2. Fixes a real bug that affects users? **PASS** — hang when kprobes lands on `handle_break`. 3. Important issue (crash, security, corruption, deadlock)? **PASS** — system hang / unresponsive. 4. Small and contained? **PASS** — +3 lines, one file. 5. No new features or APIs? **PASS** 6. Can apply to the local tree? **PASS** — `git apply --check` clean on 6.12.111. **Step 9.3: CHECK FOR EXCEPTION CATEGORIES** Record: Not a device-ID/quirk/DT/build/docs exception. It is a normal hang fix. **Step 9.4: MAKE YOUR DECISION** This belongs on 6.12.y. It restores a kprobe blacklist that this tree lost in the generic-entry split, with essentially no behavioral change except refusing probes that can wedge the machine. Detailed explanation: The problem is that RISC-V kprobes implement software breakpoints with ebreak. `do_trap_break()` is noinstr (already blacklisted), but it immediately calls `handle_break()`, which is ordinary C text. If a kprobe is installed on `handle_break()`, the first instruction is ebreak, so the exception path traps again before `kprobe_breakpoint_handler()` can run. That recurses until the system stops responding. Marking the three symbols `NOKPROBE_SYMBOL` puts them on the same blacklist `register_kprobe()` already consults. Stable users who enable kprobes (tracing, selftests, distro debug kernels) are the ones who hit this; the cost of the backport is three annotations. Verification: - [Phase 1] Parsed tags: Reviewed-by Nam Cao; Link msgid 20260806043807.2583001-1; Paul Walmsley SOB; no Fixes/syzbot - [Phase 2] Diff: +3 `NOKPROBE_SYMBOL` lines in `arch/riscv/kernel/traps.c`; no control-flow change - [Phase 2] Confirmed `traps.c` already `#include ` - [Phase 2] Confirmed `register_kprobe()` rejects `within_kprobe_blacklist()` addresses (`kernel/kprobes.c` ~1593) - [Phase 2] Confirmed `NOKPROBE_SYMBOL` writes `_kprobe_blacklist` (`include/asm-generic/kprobes.h`) - [Phase 3] `git describe HEAD` / `make kernelversion`: p-6.12-3-gc504cf0baa3d8, 6.12.111 - [Phase 3] blame: `handle_break` from `f0bddf50586da` (v6.4-rc1); wrappers from `9f564b92cf6d0` (v6.6-rc6) - [Phase 3] `git show f0bddf50586da`: removed `NOKPROBE_SYMBOL(do_trap_break)` while splitting the function - [Phase 3] `2349a3b26e29b` originally blacklisted `do_trap_break` with Cc: stable - [Phase 3] `git merge-base --is-ancestor` both introducing commits are in HEAD - [Phase 4] b4 dig: no matching commit in this tree (UNVERIFIED via b4) - [Phase 4] v1/v2 recovered from lkml.iu.edu / openwall / patchew; v2 is style-only + Reviewed-by - [Phase 4] Paul Walmsley: queued for v7.3 (patchew) - [Phase 4] lore.kernel.org and stable@ search: HTTP 403 (UNVERIFIED via lore) - [Phase 4] Nam Cao review body: UNVERIFIED (openwall msg id collision); Reviewed-by on v2 is verified - [Phase 5] Callers: `entry.S` → `do_trap_break` → `handle_break`; `do_trap_break` is `__trap_section`/`noinstr` - [Phase 5] `kprobe_breakpoint_handler` already `__kprobes` in `arch/riscv/kernel/probes/kprobes.c` - [Phase 5] Selftest `multiple_kprobes.tc` confirmed to take first 256 kallsyms text symbols - [Phase 5] x86 comparison: `NOKPROBE_SYMBOL(do_int3)` in `arch/x86/kernel/traps.c:826` - [Phase 6] Current `traps.c` has no `NOKPROBE_SYMBOL`; buggy helpers present at lines 269–305 - [Phase 6] `git apply --check` of the three-line hunk: exit 0 - [Phase 7] `arch/riscv/Kconfig`: `select HAVE_KPROBES if !XIP_KERNEL` - [Phase 8] RISC-V defconfig does not set `CONFIG_KPROBES` (trigger is config-specific) - UNVERIFIED: whether `handle_break` is in the first 256 kallsyms on a typical 6.12 RISC-V build (does not change the hang if that symbol is probed) **YES** arch/riscv/kernel/traps.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 47afea4ff1a8d..e7e45cbb08999 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -272,6 +272,7 @@ static bool probe_single_step_handler(struct pt_regs *regs) return user ? uprobe_single_step_handler(regs) : kprobe_single_step_handler(regs); } +NOKPROBE_SYMBOL(probe_single_step_handler); static bool probe_breakpoint_handler(struct pt_regs *regs) { @@ -279,6 +280,7 @@ static bool probe_breakpoint_handler(struct pt_regs *regs) return user ? uprobe_breakpoint_handler(regs) : kprobe_breakpoint_handler(regs); } +NOKPROBE_SYMBOL(probe_breakpoint_handler); void handle_break(struct pt_regs *regs) { @@ -303,6 +305,7 @@ void handle_break(struct pt_regs *regs) else die(regs, "Kernel BUG"); } +NOKPROBE_SYMBOL(handle_break); asmlinkage __visible __trap_section void do_trap_break(struct pt_regs *regs) { -- 2.53.0