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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31D6CC433EF for ; Fri, 10 Jun 2022 23:37:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351123AbiFJXhm (ORCPT ); Fri, 10 Jun 2022 19:37:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351043AbiFJXhC (ORCPT ); Fri, 10 Jun 2022 19:37:02 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D26F29ADEC for ; Fri, 10 Jun 2022 16:36:05 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-31382419c22so5746637b3.18 for ; Fri, 10 Jun 2022 16:36:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=Nj2FcQQ6lEfrPxymLsrkJw1b2S1yl6sNWE/BKYH2KMQ=; b=X3EEC5gZJaLGTcVcURSwh1BdZ+KgDOumiR78ltdLn3aAFssMNf8iW95J71NeirdC11 8HdGKrvGyxavcUSjK0OI2HQgNyrgsl5GcI14p0G290yLj4FEIRti+uctpcOTlW/SmoiF l7Lwwu4G+ei/e/wq+eYdd1ghnyQZqIQggugnxesKfPC/V1cS9oozHhBg/slW4JUTUvmJ qFJAm5yuQ3fb1A7CwVeKNAdYKH4sHICESyPp4OiVWTYSChzym6Txotzi0hwRY3kQLDMw eubwZQTSkfk79U97Rej66mF3K1RLmJ//O3lCjtedvbvqsvOvLxoYlUwCMuu3Ss60+Yvr 8k2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=Nj2FcQQ6lEfrPxymLsrkJw1b2S1yl6sNWE/BKYH2KMQ=; b=OZPCMT11zCauqBHmNuQHTaKQ7VtqidLdLfiwQRJ6ZewoIukjORCQZu/EdvmqZEdH2w cIPEbOuNv9XGhVw0EnsO1De6/xx+EUToyfLHI50cSsX8PiNBZsefHuJRRb5looV25MZN Pb7jV72SsFrJAcnHOGhPIsQCn6OWki6w1cYRikY/xkouLzneGGl48uHumlimOe9iJ53u RLGmhU/7XqUPo6si7Hqec3VXr3uaEJX6pu/4aZx6IUHeQrY+wvzR3xNyz33UgMYxa83u 5bUdSkUBzuZhOoAVJ3FWuXKuZqZxihkH6+m7jR3Q0NCNQSCvdeegswm04C9nq6eqGk4T oC4A== X-Gm-Message-State: AOAM530pOQGwlJsID25+4SaQhRJYko7neL79I0doIbkIfYtuZsH6zTOw rijQmlTOpYUDJHFoy8cMlngG1Cr8QiSTUOYS8Xs= X-Google-Smtp-Source: ABdhPJxVGYzoLz0dtA1YZ7pQXisvPcdFXe2JAwe7vc6YPzpJezG5CieqmFkfvvw14t5EGlP7YNrTM2k43DQNd0ZuTnI= X-Received: from samitolvanen1.mtv.corp.google.com ([2620:15c:201:2:f464:6db6:3d47:ed14]) (user=samitolvanen job=sendgmr) by 2002:a25:5d0d:0:b0:633:25c8:380 with SMTP id r13-20020a255d0d000000b0063325c80380mr45507038ybb.167.1654904164287; Fri, 10 Jun 2022 16:36:04 -0700 (PDT) Date: Fri, 10 Jun 2022 16:35:13 -0700 In-Reply-To: <20220610233513.1798771-1-samitolvanen@google.com> Message-Id: <20220610233513.1798771-21-samitolvanen@google.com> Mime-Version: 1.0 References: <20220610233513.1798771-1-samitolvanen@google.com> X-Developer-Key: i=samitolvanen@google.com; a=openpgp; fpr=35CCFB63B283D6D3AEB783944CB5F6848BBC56EE X-Developer-Signature: v=1; a=openpgp-sha256; l=10274; h=from:subject; bh=S9UxutCSspfmeIl4qS2cBaxdW+uZNFEa/Fr10jrQR8I=; b=owEB7QES/pANAwAKAUy19oSLvFbuAcsmYgBio9UvrlNDSxgHrq2W/3CmEYlMjhhC7DgqfXHv7FAJ hR1GXSqJAbMEAAEKAB0WIQQ1zPtjsoPW0663g5RMtfaEi7xW7gUCYqPVLwAKCRBMtfaEi7xW7m5PC/ 9XQVT9GF3M3MS7Z+zuwlzAXErTzPomRmsIk+xwRH+z65arN1z/XUWRNCF82WptGt0tRpduU0obfCi3 IlwuIW6AtQCVCdkaHLyMoT1n7g5yYyp86HejhCd7nWfl1S1Ewe6x026ymSsXi3Zs4XV63Lqpl+xcbM Xf2qbn1UwuQZfkm3M09ugsTLivqBFk50QtEkGn2b1f95IdWMdzjCbixiEe44I1smIAoa6GRveLqbD9 eViLyOvuH7Ov55Dr8vYUTmGi9jrcF0n2rg68jqXPbuJv1uY4hHaLwlpHRcTqqsI69lW+Om2vROuuG2 65/bbb3bnWcJ1DInYO0bM5lQKwwguJuFez/Y1iwUsCUsuE5UFhMNI2Ixm1h9V7htpvs+1wqqOyTAUo B9/7QAFz312wrUHzpQMLFwaSEuP7Uf0ioPQV1j27Xq9magHCRSRCuKodE1J+pRGgHznFEW8ZLLDl6/ cOK4cCqbFO7BeIJbLqNdf8tCeB4BeZqIJKiat8CQOOvyg= X-Mailer: git-send-email 2.36.1.476.g0c4daa206d-goog Subject: [RFC PATCH v3 20/20] x86: Add support for CONFIG_CFI_CLANG From: Sami Tolvanen To: linux-kernel@vger.kernel.org Cc: Kees Cook , Josh Poimboeuf , Peter Zijlstra , x86@kernel.org, Catalin Marinas , Will Deacon , Mark Rutland , Nathan Chancellor , Nick Desaulniers , Joao Moreira , Sedat Dilek , Steven Rostedt , linux-hardening@vger.kernel.org, linux-arm-kernel@lists.infradead.org, llvm@lists.linux.dev, Sami Tolvanen Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-hardening@vger.kernel.org With CONFIG_CFI_CLANG, the compiler injects a type preamble immediately before each function and a check to validate the target function type before indirect calls: ; type preamble __cfi_function: int3 int3 mov , %eax int3 int3 function: ... ; indirect call check cmpl=C2=A0 =C2=A0 , -6(%r11) je .Ltmp1 ud2 .Ltmp1: call __x86_indirect_thunk_r11 Define the __CFI_TYPE helper macro for manually annotating indirectly called assembly function with the identical premable, add error handling code for the ud2 traps emitted for indirect call checks, and allow CONFIG_CFI_CLANG to be selected on x86_64. This produces the following oops on CFI failure (generated using lkdtm): [ 15.896503] CFI failure at lkdtm_indirect_call+0x14/0x20 [lkdtm] (target: lkdtm_increment_int+0x0/0x7 [lkdtm]; expected type: 0x7e0c52a5) [ 15.898565] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI [ 15.898798] CPU: 2 PID: 133 Comm: sh Not tainted 5.19.0-rc1-00020-g524d4b861d15 #1 [ 15.898967] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014 [ 15.899004] RIP: 0010:lkdtm_indirect_call+0x14/0x20 [lkdtm] [ 15.899004] Code: c7 c2 76 02 40 c0 48 c7 c1 95 00 40 c0 e9 3b cb 3e e8 0f 1f 40 00 49 89 fb 48 c7 c7 70 64 40 c0 41 81 7b fa a5 52 0c 7f [ 15.899004] RSP: 0018:ffff9d928029fdc0 EFLAGS: 00000283 [ 15.899004] RAX: 0000000000000027 RBX: ffffffffc0406320 RCX: 024cef129f4= 58500 [ 15.899004] RDX: ffffffffa9251580 RSI: ffffffffa90736c8 RDI: ffffffffc04= 06470 [ 15.899004] RBP: 0000000000000006 R08: ffffffffa9251670 R09: 65686374616= d7369 [ 15.899004] R10: 000000002e2e2e20 R11: ffffffffc03fdc69 R12: 00000000000= 00000 [ 15.899004] R13: ffff8b2c022ee000 R14: 0000000000000000 R15: 00000000000= 00002 [ 15.899004] FS: 00007f0a6e7e86a0(0000) GS:ffff8b2c1f500000(0000) knlGS:0000000000000000 [ 15.899004] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 15.899004] CR2: 00000000010ddfd0 CR3: 0000000001bc8000 CR4: 00000000000= 006e0 [ 15.899004] Call Trace: [ 15.899004] [ 15.899004] lkdtm_CFI_FORWARD_PROTO+0x30/0x57 [lkdtm] [ 15.899004] direct_entry+0x129/0x137 [lkdtm] [ 15.899004] full_proxy_write+0x5b/0xa7 [ 15.899004] vfs_write+0x142/0x457 [ 15.899004] ? __x64_sys_wait4+0x5a/0xb7 [ 15.899004] ksys_write+0x69/0xd7 [ 15.899004] do_syscall_64+0x4f/0x97 [ 15.899004] entry_SYSCALL_64_after_hwframe+0x46/0xb0 [ 15.899004] RIP: 0033:0x7f0a6e76dfe1 [ 15.899004] Code: be 07 00 00 00 41 89 c0 e8 7e ff ff ff 44 89 c7 89 04 24 e8 91 c6 02 00 8b 04 24 48 83 c4 68 c3 48 63 ff b8 01 00 00 03 [ 15.899004] RSP: 002b:00007ffe32e133c8 EFLAGS: 00000246 ORIG_RAX: 000000= 0000000001 [ 15.899004] RAX: ffffffffffffffda RBX: 00007f0a6e7e8690 RCX: 00007f0a6e7= 6dfe1 [ 15.899004] RDX: 0000000000000012 RSI: 0000000001ad5910 RDI: 00000000000= 00001 [ 15.899004] RBP: 0000000000000001 R08: fefefefefefefeff R09: fefefeff00a= bff4e [ 15.899004] R10: 00007f0a6e7e92b0 R11: 0000000000000246 R12: 0000000001a= d5910 [ 15.899004] R13: 0000000000000012 R14: 00007ffe32e13501 R15: 0000000001a= d2450 [ 15.899004] [ 15.899004] Modules linked in: lkdtm [ 15.899004] Dumping ftrace buffer: [ 15.899004] (ftrace buffer empty) [ 15.925612] ---[ end trace 0000000000000000 ]--- [ 15.925661] RIP: 0010:lkdtm_indirect_call+0x14/0x20 [lkdtm] [ 15.925689] Code: c7 c2 76 02 40 c0 48 c7 c1 95 00 40 c0 e9 3b cb 3e e8 0f 1f 40 00 49 89 fb 48 c7 c7 70 64 40 c0 41 81 7b fa a5 52 0c 7f [ 15.925697] RSP: 0018:ffff9d928029fdc0 EFLAGS: 00000283 [ 15.925709] RAX: 0000000000000027 RBX: ffffffffc0406320 RCX: 024cef129f4= 58500 [ 15.925716] RDX: ffffffffa9251580 RSI: ffffffffa90736c8 RDI: ffffffffc04= 06470 [ 15.925722] RBP: 0000000000000006 R08: ffffffffa9251670 R09: 65686374616= d7369 [ 15.925731] R10: 000000002e2e2e20 R11: ffffffffc03fdc69 R12: 00000000000= 00000 [ 15.925739] R13: ffff8b2c022ee000 R14: 0000000000000000 R15: 00000000000= 00002 [ 15.925746] FS: 00007f0a6e7e86a0(0000) GS:ffff8b2c1f500000(0000) knlGS:0000000000000000 [ 15.925755] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 15.925762] CR2: 00000000010ddfd0 CR3: 0000000001bc8000 CR4: 00000000000= 006e0 [ 15.925889] Kernel panic - not syncing: Fatal exception Signed-off-by: Sami Tolvanen --- arch/x86/Kconfig | 2 + arch/x86/include/asm/cfi.h | 22 +++++++++ arch/x86/include/asm/linkage.h | 12 +++++ arch/x86/kernel/Makefile | 2 + arch/x86/kernel/cfi.c | 83 ++++++++++++++++++++++++++++++++++ arch/x86/kernel/traps.c | 4 +- 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 arch/x86/include/asm/cfi.h create mode 100644 arch/x86/kernel/cfi.c diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index be0b95e51df6..8b8c12b223ae 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -108,6 +108,8 @@ config X86 select ARCH_SUPPORTS_PAGE_TABLE_CHECK if X86_64 select ARCH_SUPPORTS_NUMA_BALANCING if X86_64 select ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP if NR_CPUS <=3D 4096 + select ARCH_SUPPORTS_CFI_CLANG if X86_64 + select ARCH_USES_CFI_TRAPS if X86_64 && CFI_CLANG select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG_THIN select ARCH_USE_BUILTIN_BSWAP diff --git a/arch/x86/include/asm/cfi.h b/arch/x86/include/asm/cfi.h new file mode 100644 index 000000000000..86a7b727ed89 --- /dev/null +++ b/arch/x86/include/asm/cfi.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_X86_CFI_H +#define _ASM_X86_CFI_H + +/* + * Clang Control Flow Integrity (CFI) support. + * + * Copyright (C) 2022 Google LLC + */ + +#include + +#ifdef CONFIG_CFI_CLANG +enum bug_trap_type handle_cfi_failure(struct pt_regs *regs); +#else +static inline enum bug_trap_type handle_cfi_failure(struct pt_regs *regs) +{ + return BUG_TRAP_TYPE_NONE; +} +#endif /*CONFIG_CFI_CLANG */ + +#endif /* _ASM_X86_CFI_H */ diff --git a/arch/x86/include/asm/linkage.h b/arch/x86/include/asm/linkage.= h index 85865f1645bd..0ee4a0af3974 100644 --- a/arch/x86/include/asm/linkage.h +++ b/arch/x86/include/asm/linkage.h @@ -25,6 +25,18 @@ #define RET ret #endif =20 +#ifdef CONFIG_CFI_CLANG +#define __CFI_TYPE(name) \ + .fill 7, 1, 0xCC ASM_NL \ + SYM_START(__cfi_##name, SYM_L_LOCAL, SYM_A_NONE) \ + int3 ASM_NL \ + int3 ASM_NL \ + mov __kcfi_typeid_##name, %eax ASM_NL \ + int3 ASM_NL \ + int3 ASM_NL \ + SYM_FUNC_END(__cfi_##name) +#endif + #else /* __ASSEMBLY__ */ =20 #ifdef CONFIG_SLS diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 03364dc40d8d..2a3dc7e3e6ca 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -145,6 +145,8 @@ obj-$(CONFIG_UNWINDER_GUESS) +=3D unwind_guess.o =20 obj-$(CONFIG_AMD_MEM_ENCRYPT) +=3D sev.o =20 +obj-$(CONFIG_CFI_CLANG) +=3D cfi.o + ### # 64 bit specific files ifeq ($(CONFIG_X86_64),y) diff --git a/arch/x86/kernel/cfi.c b/arch/x86/kernel/cfi.c new file mode 100644 index 000000000000..7954342b2b3a --- /dev/null +++ b/arch/x86/kernel/cfi.c @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Clang Control Flow Integrity (CFI) support. + * + * Copyright (C) 2022 Google LLC + */ +#include +#include +#include + +/* + * Returns the target address and the expected type when regs->ip points + * to a compiler-generated CFI trap. + */ +static bool decode_cfi_insn(struct pt_regs *regs, unsigned long *target, + u32 *type) +{ + char buffer[MAX_INSN_SIZE]; + struct insn insn; + int offset =3D 0; + + *target =3D *type =3D 0; + + /* + * The compiler generates the following instruction sequence + * for indirect call checks: + * + * =C2=A0 cmpl=C2=A0 =C2=A0 , -6(%reg) ; 7-8 bytes + * je .Ltmp1 ; 2 bytes + * ud2 ; <- addr + * .Ltmp1: + * + * Both the type and the target address can be decoded from the + * cmpl instruction. + */ + if (copy_from_kernel_nofault(buffer, (void *)regs->ip - 10, MAX_INSN_SIZE= )) + return false; + /* + * The compiler may not use r8-r15 without retpolines. Skip the + * first byte if it's not the expected REX prefix. + */ + if (buffer[0] !=3D 0x41) + ++offset; + if (insn_decode_kernel(&insn, &buffer[offset])) + return false; + if (insn.opcode.value !=3D 0x81 || X86_MODRM_REG(insn.modrm.value) !=3D 7= ) + return false; + + *type =3D insn.immediate.value; + + /* Read the target address from the register. */ + offset =3D insn_get_modrm_rm_off(&insn, regs); + if (offset < 0) + return false; + + *target =3D *(unsigned long *)((void *)regs + offset); + + return true; +} + +/* + * Checks if a ud2 trap is because of a CFI failure, and handles the trap + * if needed. Returns a bug_trap_type value similarly to report_bug. + */ +enum bug_trap_type handle_cfi_failure(struct pt_regs *regs) +{ + unsigned long target; + u32 type; + + if (!is_cfi_trap(regs->ip)) + return BUG_TRAP_TYPE_NONE; + + if (!decode_cfi_insn(regs, &target, &type)) + return report_cfi_failure_noaddr(regs, regs->ip); + + return report_cfi_failure(regs, regs->ip, &target, type); +} + +/* + * Ensure that __kcfi_typeid_ symbols are emitted for functions that may + * not be indirectly called with all configurations. + */ +__ADDRESSABLE(memcpy) diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index d62b2cb85cea..178015a820f0 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -63,6 +63,7 @@ #include #include #include +#include =20 #ifdef CONFIG_X86_64 #include @@ -313,7 +314,8 @@ static noinstr bool handle_bug(struct pt_regs *regs) */ if (regs->flags & X86_EFLAGS_IF) raw_local_irq_enable(); - if (report_bug(regs->ip, regs) =3D=3D BUG_TRAP_TYPE_WARN) { + if (report_bug(regs->ip, regs) =3D=3D BUG_TRAP_TYPE_WARN || + handle_cfi_failure(regs) =3D=3D BUG_TRAP_TYPE_WARN) { regs->ip +=3D LEN_UD2; handled =3D true; } --=20 2.36.1.476.g0c4daa206d-goog 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 79250C43334 for ; Fri, 10 Jun 2022 23:41:43 +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:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=B2ZB6rYi+d+uxhI8PDM2p5T9Ua4XymsQUXMBVTBvRHo=; b=Lxsz/hM87BDccdj+Mj2pmG0KZo nMhnlX2s5bgQm8ybC3LczyuaDOUur+kV5BnuNsU7w/0tarMf158KGTeXnMORGFoUKDnxNhmR1mrs/ RuEccli5hBZnaH6JI34BLzA9PQFB0cFpTGKm5FX+mp/mNCSDjX85IxMyK9Ozi2c3TXPE8TE+KzqyP 5QN2LCnoWBmrfcq1aKOUo8AAtNXI17LnN2+EWHlR7DvZGN5RJIMbLsHJbap/Z6FvnhxHQsDDmjtpD rlYURaf+53gKQLoBxtag5dLZAHwBp7pfHIVUB6k8KnfHXtE3xGVAmYCedvZfiLmjy6VSibBrDwde6 vYYjmweA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nzoEm-00ATIe-4x; Fri, 10 Jun 2022 23:40:21 +0000 Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nzoAf-00AR90-U2 for linux-arm-kernel@lists.infradead.org; Fri, 10 Jun 2022 23:36:08 +0000 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-30c14765d55so5980297b3.13 for ; Fri, 10 Jun 2022 16:36:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=Nj2FcQQ6lEfrPxymLsrkJw1b2S1yl6sNWE/BKYH2KMQ=; b=X3EEC5gZJaLGTcVcURSwh1BdZ+KgDOumiR78ltdLn3aAFssMNf8iW95J71NeirdC11 8HdGKrvGyxavcUSjK0OI2HQgNyrgsl5GcI14p0G290yLj4FEIRti+uctpcOTlW/SmoiF l7Lwwu4G+ei/e/wq+eYdd1ghnyQZqIQggugnxesKfPC/V1cS9oozHhBg/slW4JUTUvmJ qFJAm5yuQ3fb1A7CwVeKNAdYKH4sHICESyPp4OiVWTYSChzym6Txotzi0hwRY3kQLDMw eubwZQTSkfk79U97Rej66mF3K1RLmJ//O3lCjtedvbvqsvOvLxoYlUwCMuu3Ss60+Yvr 8k2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=Nj2FcQQ6lEfrPxymLsrkJw1b2S1yl6sNWE/BKYH2KMQ=; b=xVxwPRZkrpgQhsFdooWUGhPQAUnisL0d2Y8ddAM4gGorbzx1sXSw/seeTdXTIZLx6v Kh0YJqeZ5rTEM7Sl8CmVLQ24YLmwPftaz0xbkW13INr/gU6c4J2YF2RoxRTRMIWIgem8 h2gzHdG6+gUr/kHExd66gWfsd8xeD5umpP80iujn01u+UM7S2QoSe5ouakEpPCz/632/ h85K2ijT1P6TgyHppIJPgxv60ohqD9YMdMe2q6o0JQYj+eO2h4EWlhh8EIozn61vvOIo CjH7vM6YEVZ+jXBMSZst3d6KR9kWxWPJaD3++kEZfLaCR1RDw5CEF6fYktJNOSS16ixf IPCg== X-Gm-Message-State: AOAM5308Agtnr+hvciwMf3sjWRc72Bs7aFbLxLAXuYAiojX0jLXlrDTb qD07jA3qMC8JN1H/jfvKf7QpP5ezzpeR1PY56JU= X-Google-Smtp-Source: ABdhPJxVGYzoLz0dtA1YZ7pQXisvPcdFXe2JAwe7vc6YPzpJezG5CieqmFkfvvw14t5EGlP7YNrTM2k43DQNd0ZuTnI= X-Received: from samitolvanen1.mtv.corp.google.com ([2620:15c:201:2:f464:6db6:3d47:ed14]) (user=samitolvanen job=sendgmr) by 2002:a25:5d0d:0:b0:633:25c8:380 with SMTP id r13-20020a255d0d000000b0063325c80380mr45507038ybb.167.1654904164287; Fri, 10 Jun 2022 16:36:04 -0700 (PDT) Date: Fri, 10 Jun 2022 16:35:13 -0700 In-Reply-To: <20220610233513.1798771-1-samitolvanen@google.com> Message-Id: <20220610233513.1798771-21-samitolvanen@google.com> Mime-Version: 1.0 References: <20220610233513.1798771-1-samitolvanen@google.com> X-Developer-Key: i=samitolvanen@google.com; a=openpgp; fpr=35CCFB63B283D6D3AEB783944CB5F6848BBC56EE X-Developer-Signature: v=1; a=openpgp-sha256; l=10274; h=from:subject; bh=S9UxutCSspfmeIl4qS2cBaxdW+uZNFEa/Fr10jrQR8I=; b=owEB7QES/pANAwAKAUy19oSLvFbuAcsmYgBio9UvrlNDSxgHrq2W/3CmEYlMjhhC7DgqfXHv7FAJ hR1GXSqJAbMEAAEKAB0WIQQ1zPtjsoPW0663g5RMtfaEi7xW7gUCYqPVLwAKCRBMtfaEi7xW7m5PC/ 9XQVT9GF3M3MS7Z+zuwlzAXErTzPomRmsIk+xwRH+z65arN1z/XUWRNCF82WptGt0tRpduU0obfCi3 IlwuIW6AtQCVCdkaHLyMoT1n7g5yYyp86HejhCd7nWfl1S1Ewe6x026ymSsXi3Zs4XV63Lqpl+xcbM Xf2qbn1UwuQZfkm3M09ugsTLivqBFk50QtEkGn2b1f95IdWMdzjCbixiEe44I1smIAoa6GRveLqbD9 eViLyOvuH7Ov55Dr8vYUTmGi9jrcF0n2rg68jqXPbuJv1uY4hHaLwlpHRcTqqsI69lW+Om2vROuuG2 65/bbb3bnWcJ1DInYO0bM5lQKwwguJuFez/Y1iwUsCUsuE5UFhMNI2Ixm1h9V7htpvs+1wqqOyTAUo B9/7QAFz312wrUHzpQMLFwaSEuP7Uf0ioPQV1j27Xq9magHCRSRCuKodE1J+pRGgHznFEW8ZLLDl6/ cOK4cCqbFO7BeIJbLqNdf8tCeB4BeZqIJKiat8CQOOvyg= X-Mailer: git-send-email 2.36.1.476.g0c4daa206d-goog Subject: [RFC PATCH v3 20/20] x86: Add support for CONFIG_CFI_CLANG From: Sami Tolvanen To: linux-kernel@vger.kernel.org Cc: Kees Cook , Josh Poimboeuf , Peter Zijlstra , x86@kernel.org, Catalin Marinas , Will Deacon , Mark Rutland , Nathan Chancellor , Nick Desaulniers , Joao Moreira , Sedat Dilek , Steven Rostedt , linux-hardening@vger.kernel.org, linux-arm-kernel@lists.infradead.org, llvm@lists.linux.dev, Sami Tolvanen X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220610_163606_016237_62771BF4 X-CRM114-Status: GOOD ( 28.38 ) 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org V2l0aCBDT05GSUdfQ0ZJX0NMQU5HLCB0aGUgY29tcGlsZXIgaW5qZWN0cyBhIHR5cGUgcHJlYW1i bGUgaW1tZWRpYXRlbHkKYmVmb3JlIGVhY2ggZnVuY3Rpb24gYW5kIGEgY2hlY2sgdG8gdmFsaWRh dGUgdGhlIHRhcmdldCBmdW5jdGlvbiB0eXBlCmJlZm9yZSBpbmRpcmVjdCBjYWxsczoKCiAgOyB0 eXBlIHByZWFtYmxlCiAgX19jZmlfZnVuY3Rpb246CiAgICBpbnQzCiAgICBpbnQzCiAgICBtb3Yg PGlkPiwgJWVheAogICAgaW50MwogICAgaW50MwogIGZ1bmN0aW9uOgogICAgLi4uCiAgOyBpbmRp cmVjdCBjYWxsIGNoZWNrCiAgICBjbXBswqAgwqAgPGlkPiwgLTYoJXIxMSkKICAgIGplICAgICAg Lkx0bXAxCiAgICB1ZDIKICAuTHRtcDE6CiAgICBjYWxsICAgIF9feDg2X2luZGlyZWN0X3RodW5r X3IxMQoKRGVmaW5lIHRoZSBfX0NGSV9UWVBFIGhlbHBlciBtYWNybyBmb3IgbWFudWFsbHkgYW5u b3RhdGluZyBpbmRpcmVjdGx5CmNhbGxlZCBhc3NlbWJseSBmdW5jdGlvbiB3aXRoIHRoZSBpZGVu dGljYWwgcHJlbWFibGUsIGFkZCBlcnJvciBoYW5kbGluZwpjb2RlIGZvciB0aGUgdWQyIHRyYXBz IGVtaXR0ZWQgZm9yIGluZGlyZWN0IGNhbGwgY2hlY2tzLCBhbmQgYWxsb3cKQ09ORklHX0NGSV9D TEFORyB0byBiZSBzZWxlY3RlZCBvbiB4ODZfNjQuCgpUaGlzIHByb2R1Y2VzIHRoZSBmb2xsb3dp bmcgb29wcyBvbiBDRkkgZmFpbHVyZSAoZ2VuZXJhdGVkIHVzaW5nIGxrZHRtKToKClsgICAxNS44 OTY1MDNdIENGSSBmYWlsdXJlIGF0IGxrZHRtX2luZGlyZWN0X2NhbGwrMHgxNC8weDIwIFtsa2R0 bV0KKHRhcmdldDogbGtkdG1faW5jcmVtZW50X2ludCsweDAvMHg3IFtsa2R0bV07IGV4cGVjdGVk IHR5cGU6IDB4N2UwYzUyYTUpClsgICAxNS44OTg1NjVdIGludmFsaWQgb3Bjb2RlOiAwMDAwIFsj MV0gUFJFRU1QVCBTTVAgTk9QVEkKWyAgIDE1Ljg5ODc5OF0gQ1BVOiAyIFBJRDogMTMzIENvbW06 IHNoIE5vdCB0YWludGVkCjUuMTkuMC1yYzEtMDAwMjAtZzUyNGQ0Yjg2MWQxNSAjMQpbICAgMTUu ODk4OTY3XSBIYXJkd2FyZSBuYW1lOiBRRU1VIFN0YW5kYXJkIFBDIChpNDQwRlggKyBQSUlYLCAx OTk2KSwKQklPUyByZWwtMS4xNC4wLTAtZzE1NTgyMWExOTkwYi1wcmVidWlsdC5xZW11Lm9yZyAw NC8wMS8yMDE0ClsgICAxNS44OTkwMDRdIFJJUDogMDAxMDpsa2R0bV9pbmRpcmVjdF9jYWxsKzB4 MTQvMHgyMCBbbGtkdG1dClsgICAxNS44OTkwMDRdIENvZGU6IGM3IGMyIDc2IDAyIDQwIGMwIDQ4 IGM3IGMxIDk1IDAwIDQwIGMwIGU5IDNiIGNiIDNlCmU4IDBmIDFmIDQwIDAwIDQ5IDg5IGZiIDQ4 IGM3IGM3IDcwIDY0IDQwIGMwIDQxIDgxIDdiIGZhIGE1IDUyIDBjIDdmClsgICAxNS44OTkwMDRd IFJTUDogMDAxODpmZmZmOWQ5MjgwMjlmZGMwIEVGTEFHUzogMDAwMDAyODMKWyAgIDE1Ljg5OTAw NF0gUkFYOiAwMDAwMDAwMDAwMDAwMDI3IFJCWDogZmZmZmZmZmZjMDQwNjMyMCBSQ1g6IDAyNGNl ZjEyOWY0NTg1MDAKWyAgIDE1Ljg5OTAwNF0gUkRYOiBmZmZmZmZmZmE5MjUxNTgwIFJTSTogZmZm ZmZmZmZhOTA3MzZjOCBSREk6IGZmZmZmZmZmYzA0MDY0NzAKWyAgIDE1Ljg5OTAwNF0gUkJQOiAw MDAwMDAwMDAwMDAwMDA2IFIwODogZmZmZmZmZmZhOTI1MTY3MCBSMDk6IDY1Njg2Mzc0NjE2ZDcz NjkKWyAgIDE1Ljg5OTAwNF0gUjEwOiAwMDAwMDAwMDJlMmUyZTIwIFIxMTogZmZmZmZmZmZjMDNm ZGM2OSBSMTI6IDAwMDAwMDAwMDAwMDAwMDAKWyAgIDE1Ljg5OTAwNF0gUjEzOiBmZmZmOGIyYzAy MmVlMDAwIFIxNDogMDAwMDAwMDAwMDAwMDAwMCBSMTU6IDAwMDAwMDAwMDAwMDAwMDIKWyAgIDE1 Ljg5OTAwNF0gRlM6ICAwMDAwN2YwYTZlN2U4NmEwKDAwMDApIEdTOmZmZmY4YjJjMWY1MDAwMDAo MDAwMCkKa25sR1M6MDAwMDAwMDAwMDAwMDAwMApbICAgMTUuODk5MDA0XSBDUzogIDAwMTAgRFM6 IDAwMDAgRVM6IDAwMDAgQ1IwOiAwMDAwMDAwMDgwMDUwMDMzClsgICAxNS44OTkwMDRdIENSMjog MDAwMDAwMDAwMTBkZGZkMCBDUjM6IDAwMDAwMDAwMDFiYzgwMDAgQ1I0OiAwMDAwMDAwMDAwMDAw NmUwClsgICAxNS44OTkwMDRdIENhbGwgVHJhY2U6ClsgICAxNS44OTkwMDRdICA8VEFTSz4KWyAg IDE1Ljg5OTAwNF0gIGxrZHRtX0NGSV9GT1JXQVJEX1BST1RPKzB4MzAvMHg1NyBbbGtkdG1dClsg ICAxNS44OTkwMDRdICBkaXJlY3RfZW50cnkrMHgxMjkvMHgxMzcgW2xrZHRtXQpbICAgMTUuODk5 MDA0XSAgZnVsbF9wcm94eV93cml0ZSsweDViLzB4YTcKWyAgIDE1Ljg5OTAwNF0gIHZmc193cml0 ZSsweDE0Mi8weDQ1NwpbICAgMTUuODk5MDA0XSAgPyBfX3g2NF9zeXNfd2FpdDQrMHg1YS8weGI3 ClsgICAxNS44OTkwMDRdICBrc3lzX3dyaXRlKzB4NjkvMHhkNwpbICAgMTUuODk5MDA0XSAgZG9f c3lzY2FsbF82NCsweDRmLzB4OTcKWyAgIDE1Ljg5OTAwNF0gIGVudHJ5X1NZU0NBTExfNjRfYWZ0 ZXJfaHdmcmFtZSsweDQ2LzB4YjAKWyAgIDE1Ljg5OTAwNF0gUklQOiAwMDMzOjB4N2YwYTZlNzZk ZmUxClsgICAxNS44OTkwMDRdIENvZGU6IGJlIDA3IDAwIDAwIDAwIDQxIDg5IGMwIGU4IDdlIGZm IGZmIGZmIDQ0IDg5IGM3IDg5CjA0IDI0IGU4IDkxIGM2IDAyIDAwIDhiIDA0IDI0IDQ4IDgzIGM0 IDY4IGMzIDQ4IDYzIGZmIGI4IDAxIDAwIDAwIDAzClsgICAxNS44OTkwMDRdIFJTUDogMDAyYjow MDAwN2ZmZTMyZTEzM2M4IEVGTEFHUzogMDAwMDAyNDYgT1JJR19SQVg6IDAwMDAwMDAwMDAwMDAw MDEKWyAgIDE1Ljg5OTAwNF0gUkFYOiBmZmZmZmZmZmZmZmZmZmRhIFJCWDogMDAwMDdmMGE2ZTdl ODY5MCBSQ1g6IDAwMDA3ZjBhNmU3NmRmZTEKWyAgIDE1Ljg5OTAwNF0gUkRYOiAwMDAwMDAwMDAw MDAwMDEyIFJTSTogMDAwMDAwMDAwMWFkNTkxMCBSREk6IDAwMDAwMDAwMDAwMDAwMDEKWyAgIDE1 Ljg5OTAwNF0gUkJQOiAwMDAwMDAwMDAwMDAwMDAxIFIwODogZmVmZWZlZmVmZWZlZmVmZiBSMDk6 IGZlZmVmZWZmMDBhYmZmNGUKWyAgIDE1Ljg5OTAwNF0gUjEwOiAwMDAwN2YwYTZlN2U5MmIwIFIx MTogMDAwMDAwMDAwMDAwMDI0NiBSMTI6IDAwMDAwMDAwMDFhZDU5MTAKWyAgIDE1Ljg5OTAwNF0g UjEzOiAwMDAwMDAwMDAwMDAwMDEyIFIxNDogMDAwMDdmZmUzMmUxMzUwMSBSMTU6IDAwMDAwMDAw MDFhZDI0NTAKWyAgIDE1Ljg5OTAwNF0gIDwvVEFTSz4KWyAgIDE1Ljg5OTAwNF0gTW9kdWxlcyBs aW5rZWQgaW46IGxrZHRtClsgICAxNS44OTkwMDRdIER1bXBpbmcgZnRyYWNlIGJ1ZmZlcjoKWyAg IDE1Ljg5OTAwNF0gICAgKGZ0cmFjZSBidWZmZXIgZW1wdHkpClsgICAxNS45MjU2MTJdIC0tLVsg ZW5kIHRyYWNlIDAwMDAwMDAwMDAwMDAwMDAgXS0tLQpbICAgMTUuOTI1NjYxXSBSSVA6IDAwMTA6 bGtkdG1faW5kaXJlY3RfY2FsbCsweDE0LzB4MjAgW2xrZHRtXQpbICAgMTUuOTI1Njg5XSBDb2Rl OiBjNyBjMiA3NiAwMiA0MCBjMCA0OCBjNyBjMSA5NSAwMCA0MCBjMCBlOSAzYiBjYiAzZQplOCAw ZiAxZiA0MCAwMCA0OSA4OSBmYiA0OCBjNyBjNyA3MCA2NCA0MCBjMCA0MSA4MSA3YiBmYSBhNSA1 MiAwYyA3ZgpbICAgMTUuOTI1Njk3XSBSU1A6IDAwMTg6ZmZmZjlkOTI4MDI5ZmRjMCBFRkxBR1M6 IDAwMDAwMjgzClsgICAxNS45MjU3MDldIFJBWDogMDAwMDAwMDAwMDAwMDAyNyBSQlg6IGZmZmZm ZmZmYzA0MDYzMjAgUkNYOiAwMjRjZWYxMjlmNDU4NTAwClsgICAxNS45MjU3MTZdIFJEWDogZmZm ZmZmZmZhOTI1MTU4MCBSU0k6IGZmZmZmZmZmYTkwNzM2YzggUkRJOiBmZmZmZmZmZmMwNDA2NDcw ClsgICAxNS45MjU3MjJdIFJCUDogMDAwMDAwMDAwMDAwMDAwNiBSMDg6IGZmZmZmZmZmYTkyNTE2 NzAgUjA5OiA2NTY4NjM3NDYxNmQ3MzY5ClsgICAxNS45MjU3MzFdIFIxMDogMDAwMDAwMDAyZTJl MmUyMCBSMTE6IGZmZmZmZmZmYzAzZmRjNjkgUjEyOiAwMDAwMDAwMDAwMDAwMDAwClsgICAxNS45 MjU3MzldIFIxMzogZmZmZjhiMmMwMjJlZTAwMCBSMTQ6IDAwMDAwMDAwMDAwMDAwMDAgUjE1OiAw MDAwMDAwMDAwMDAwMDAyClsgICAxNS45MjU3NDZdIEZTOiAgMDAwMDdmMGE2ZTdlODZhMCgwMDAw KSBHUzpmZmZmOGIyYzFmNTAwMDAwKDAwMDApCmtubEdTOjAwMDAwMDAwMDAwMDAwMDAKWyAgIDE1 LjkyNTc1NV0gQ1M6ICAwMDEwIERTOiAwMDAwIEVTOiAwMDAwIENSMDogMDAwMDAwMDA4MDA1MDAz MwpbICAgMTUuOTI1NzYyXSBDUjI6IDAwMDAwMDAwMDEwZGRmZDAgQ1IzOiAwMDAwMDAwMDAxYmM4 MDAwIENSNDogMDAwMDAwMDAwMDAwMDZlMApbICAgMTUuOTI1ODg5XSBLZXJuZWwgcGFuaWMgLSBu b3Qgc3luY2luZzogRmF0YWwgZXhjZXB0aW9uCgpTaWduZWQtb2ZmLWJ5OiBTYW1pIFRvbHZhbmVu IDxzYW1pdG9sdmFuZW5AZ29vZ2xlLmNvbT4KLS0tCiBhcmNoL3g4Ni9LY29uZmlnICAgICAgICAg ICAgICAgfCAgMiArCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaCAgICAgfCAyMiArKysrKysr KysKIGFyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaCB8IDEyICsrKysrCiBhcmNoL3g4Ni9r ZXJuZWwvTWFrZWZpbGUgICAgICAgfCAgMiArCiBhcmNoL3g4Ni9rZXJuZWwvY2ZpLmMgICAgICAg ICAgfCA4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBhcmNoL3g4Ni9rZXJu ZWwvdHJhcHMuYyAgICAgICAgfCAgNCArLQogNiBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2luY2x1ZGUv YXNtL2NmaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYva2VybmVsL2NmaS5jCgpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmUwYjk1 ZTUxZGY2Li44YjhjMTJiMjIzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIv YXJjaC94ODYvS2NvbmZpZwpAQCAtMTA4LDYgKzEwOCw4IEBAIGNvbmZpZyBYODYKIAlzZWxlY3Qg QVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLCWlmIFg4Nl82NAogCXNlbGVjdCBBUkNIX1NV UFBPUlRTX05VTUFfQkFMQU5DSU5HCWlmIFg4Nl82NAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0tN QVBfTE9DQUxfRk9SQ0VfTUFQCWlmIE5SX0NQVVMgPD0gNDA5NgorCXNlbGVjdCBBUkNIX1NVUFBP UlRTX0NGSV9DTEFORwkJaWYgWDg2XzY0CisJc2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFMJCWlm IFg4Nl82NCAmJiBDRklfQ0xBTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkcKIAlz ZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTgogCXNlbGVjdCBBUkNIX1VTRV9CVUlM VElOX0JTV0FQCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaCBiL2FyY2gv eDg2L2luY2x1ZGUvYXNtL2NmaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uODZhN2I3MjdlZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9h c20vY2ZpLmgKQEAgLTAsMCArMSwyMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgKi8KKyNpZm5kZWYgX0FTTV9YODZfQ0ZJX0gKKyNkZWZpbmUgX0FTTV9YODZfQ0ZJX0gK KworLyoKKyAqIENsYW5nIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKENGSSkgc3VwcG9ydC4KKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgR29vZ2xlIExMQworICovCisKKyNpbmNsdWRlIDxsaW51 eC9jZmkuaD4KKworI2lmZGVmIENPTkZJR19DRklfQ0xBTkcKK2VudW0gYnVnX3RyYXBfdHlwZSBo YW5kbGVfY2ZpX2ZhaWx1cmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2Vsc2UKK3N0YXRpYyBp bmxpbmUgZW51bSBidWdfdHJhcF90eXBlIGhhbmRsZV9jZmlfZmFpbHVyZShzdHJ1Y3QgcHRfcmVn cyAqcmVncykKK3sKKwlyZXR1cm4gQlVHX1RSQVBfVFlQRV9OT05FOworfQorI2VuZGlmIC8qQ09O RklHX0NGSV9DTEFORyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfQ0ZJX0ggKi8KZGlmZiAtLWdp dCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L2xpbmthZ2UuaAppbmRleCA4NTg2NWYxNjQ1YmQuLjBlZTRhMGFmMzk3NCAxMDA2NDQKLS0tIGEv YXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L2xpbmthZ2UuaApAQCAtMjUsNiArMjUsMTggQEAKICNkZWZpbmUgUkVUCXJldAogI2VuZGlmCiAK KyNpZmRlZiBDT05GSUdfQ0ZJX0NMQU5HCisjZGVmaW5lIF9fQ0ZJX1RZUEUobmFtZSkJCQkJCVwK KwkuZmlsbCA3LCAxLCAweENDIEFTTV9OTAkJCQkJXAorCVNZTV9TVEFSVChfX2NmaV8jI25hbWUs IFNZTV9MX0xPQ0FMLCBTWU1fQV9OT05FKQlcCisJaW50MyBBU01fTkwJCQkJCQlcCisJaW50MyBB U01fTkwJCQkJCQlcCisJbW92IF9fa2NmaV90eXBlaWRfIyNuYW1lLCAlZWF4IEFTTV9OTAkJCVwK KwlpbnQzIEFTTV9OTAkJCQkJCVwKKwlpbnQzIEFTTV9OTAkJCQkJCVwKKwlTWU1fRlVOQ19FTkQo X19jZmlfIyNuYW1lKQorI2VuZGlmCisKICNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjaWZk ZWYgQ09ORklHX1NMUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJj aC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDAzMzY0ZGM0MGQ4ZC4uMmEzZGM3ZTNlNmNhIDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVs L01ha2VmaWxlCkBAIC0xNDUsNiArMTQ1LDggQEAgb2JqLSQoQ09ORklHX1VOV0lOREVSX0dVRVNT KQkJKz0gdW53aW5kX2d1ZXNzLm8KIAogb2JqLSQoQ09ORklHX0FNRF9NRU1fRU5DUllQVCkJCSs9 IHNldi5vCiAKK29iai0kKENPTkZJR19DRklfQ0xBTkcpCQkJKz0gY2ZpLm8KKwogIyMjCiAjIDY0 IGJpdCBzcGVjaWZpYyBmaWxlcwogaWZlcSAoJChDT05GSUdfWDg2XzY0KSx5KQpkaWZmIC0tZ2l0 IGEvYXJjaC94ODYva2VybmVsL2NmaS5jIGIvYXJjaC94ODYva2VybmVsL2NmaS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzk1NDM0MmIyYjNhCi0tLSAvZGV2L251 bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NmaS5jCkBAIC0wLDAgKzEsODMgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ2xhbmcgQ29udHJvbCBGbG93IElu dGVncml0eSAoQ0ZJKSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBHb29nbGUg TExDCisgKi8KKyNpbmNsdWRlIDxhc20vY2ZpLmg+CisjaW5jbHVkZSA8YXNtL2luc24uaD4KKyNp bmNsdWRlIDxhc20vaW5zbi1ldmFsLmg+CisKKy8qCisgKiBSZXR1cm5zIHRoZSB0YXJnZXQgYWRk cmVzcyBhbmQgdGhlIGV4cGVjdGVkIHR5cGUgd2hlbiByZWdzLT5pcCBwb2ludHMKKyAqIHRvIGEg Y29tcGlsZXItZ2VuZXJhdGVkIENGSSB0cmFwLgorICovCitzdGF0aWMgYm9vbCBkZWNvZGVfY2Zp X2luc24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgKnRhcmdldCwKKwkJCSAg ICB1MzIgKnR5cGUpCit7CisJY2hhciBidWZmZXJbTUFYX0lOU05fU0laRV07CisJc3RydWN0IGlu c24gaW5zbjsKKwlpbnQgb2Zmc2V0ID0gMDsKKworCSp0YXJnZXQgPSAqdHlwZSA9IDA7CisKKwkv KgorCSAqIFRoZSBjb21waWxlciBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBz ZXF1ZW5jZQorCSAqIGZvciBpbmRpcmVjdCBjYWxsIGNoZWNrczoKKwkgKgorCSAqIMKgIGNtcGzC oCDCoCA8aWQ+LCAtNiglcmVnKQk7IDctOCBieXRlcworCSAqICAgamUgICAgICAuTHRtcDEJCTsg MiBieXRlcworCSAqICAgdWQyCQkJOyA8LSBhZGRyCisJICogICAuTHRtcDE6CisJICoKKwkgKiBC b3RoIHRoZSB0eXBlIGFuZCB0aGUgdGFyZ2V0IGFkZHJlc3MgY2FuIGJlIGRlY29kZWQgZnJvbSB0 aGUKKwkgKiBjbXBsIGluc3RydWN0aW9uLgorCSAqLworCWlmIChjb3B5X2Zyb21fa2VybmVsX25v ZmF1bHQoYnVmZmVyLCAodm9pZCAqKXJlZ3MtPmlwIC0gMTAsIE1BWF9JTlNOX1NJWkUpKQorCQly ZXR1cm4gZmFsc2U7CisJLyoKKwkgKiBUaGUgY29tcGlsZXIgbWF5IG5vdCB1c2UgcjgtcjE1IHdp dGhvdXQgcmV0cG9saW5lcy4gU2tpcCB0aGUKKwkgKiBmaXJzdCBieXRlIGlmIGl0J3Mgbm90IHRo ZSBleHBlY3RlZCBSRVggcHJlZml4LgorCSAqLworCWlmIChidWZmZXJbMF0gIT0gMHg0MSkKKwkJ KytvZmZzZXQ7CisJaWYgKGluc25fZGVjb2RlX2tlcm5lbCgmaW5zbiwgJmJ1ZmZlcltvZmZzZXRd KSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChpbnNuLm9wY29kZS52YWx1ZSAhPSAweDgxIHx8IFg4 Nl9NT0RSTV9SRUcoaW5zbi5tb2RybS52YWx1ZSkgIT0gNykKKwkJcmV0dXJuIGZhbHNlOworCisJ KnR5cGUgPSBpbnNuLmltbWVkaWF0ZS52YWx1ZTsKKworCS8qIFJlYWQgdGhlIHRhcmdldCBhZGRy ZXNzIGZyb20gdGhlIHJlZ2lzdGVyLiAqLworCW9mZnNldCA9IGluc25fZ2V0X21vZHJtX3JtX29m ZigmaW5zbiwgcmVncyk7CisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybiBmYWxzZTsKKworCSp0 YXJnZXQgPSAqKHVuc2lnbmVkIGxvbmcgKikoKHZvaWQgKilyZWdzICsgb2Zmc2V0KTsKKworCXJl dHVybiB0cnVlOworfQorCisvKgorICogQ2hlY2tzIGlmIGEgdWQyIHRyYXAgaXMgYmVjYXVzZSBv ZiBhIENGSSBmYWlsdXJlLCBhbmQgaGFuZGxlcyB0aGUgdHJhcAorICogaWYgbmVlZGVkLiBSZXR1 cm5zIGEgYnVnX3RyYXBfdHlwZSB2YWx1ZSBzaW1pbGFybHkgdG8gcmVwb3J0X2J1Zy4KKyAqLwor ZW51bSBidWdfdHJhcF90eXBlIGhhbmRsZV9jZmlfZmFpbHVyZShzdHJ1Y3QgcHRfcmVncyAqcmVn cykKK3sKKwl1bnNpZ25lZCBsb25nIHRhcmdldDsKKwl1MzIgdHlwZTsKKworCWlmICghaXNfY2Zp X3RyYXAocmVncy0+aXApKQorCQlyZXR1cm4gQlVHX1RSQVBfVFlQRV9OT05FOworCisJaWYgKCFk ZWNvZGVfY2ZpX2luc24ocmVncywgJnRhcmdldCwgJnR5cGUpKQorCQlyZXR1cm4gcmVwb3J0X2Nm aV9mYWlsdXJlX25vYWRkcihyZWdzLCByZWdzLT5pcCk7CisKKwlyZXR1cm4gcmVwb3J0X2NmaV9m YWlsdXJlKHJlZ3MsIHJlZ3MtPmlwLCAmdGFyZ2V0LCB0eXBlKTsKK30KKworLyoKKyAqIEVuc3Vy ZSB0aGF0IF9fa2NmaV90eXBlaWRfIHN5bWJvbHMgYXJlIGVtaXR0ZWQgZm9yIGZ1bmN0aW9ucyB0 aGF0IG1heQorICogbm90IGJlIGluZGlyZWN0bHkgY2FsbGVkIHdpdGggYWxsIGNvbmZpZ3VyYXRp b25zLgorICovCitfX0FERFJFU1NBQkxFKG1lbWNweSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tl cm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggZDYyYjJjYjg1Y2Vh Li4xNzgwMTVhODIwZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCisrKyBi L2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSA8YXNt L2luc24tZXZhbC5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSA8YXNtL3RkeC5o PgorI2luY2x1ZGUgPGFzbS9jZmkuaD4KIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRl IDxhc20veDg2X2luaXQuaD4KQEAgLTMxMyw3ICszMTQsOCBAQCBzdGF0aWMgbm9pbnN0ciBib29s IGhhbmRsZV9idWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJICovCiAJaWYgKHJlZ3MtPmZsYWdz ICYgWDg2X0VGTEFHU19JRikKIAkJcmF3X2xvY2FsX2lycV9lbmFibGUoKTsKLQlpZiAocmVwb3J0 X2J1ZyhyZWdzLT5pcCwgcmVncykgPT0gQlVHX1RSQVBfVFlQRV9XQVJOKSB7CisJaWYgKHJlcG9y dF9idWcocmVncy0+aXAsIHJlZ3MpID09IEJVR19UUkFQX1RZUEVfV0FSTiB8fAorCSAgICBoYW5k bGVfY2ZpX2ZhaWx1cmUocmVncykgPT0gQlVHX1RSQVBfVFlQRV9XQVJOKSB7CiAJCXJlZ3MtPmlw ICs9IExFTl9VRDI7CiAJCWhhbmRsZWQgPSB0cnVlOwogCX0KLS0gCjIuMzYuMS40NzYuZzBjNGRh YTIwNmQtZ29vZwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK