Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp562606pxb; Wed, 13 Jan 2021 10:10:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJwn7IB6qiHuUi1gxIZOwLFLWi6x94CKfUYwjLC8nUUe8lHLlwM0uJdKyqyARtxmvzW55MZG X-Received: by 2002:a50:b586:: with SMTP id a6mr2802938ede.206.1610561407838; Wed, 13 Jan 2021 10:10:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610561407; cv=none; d=google.com; s=arc-20160816; b=uYPex4syChtJ4MIR471A9SayFiJ2slb3grPfIe7gxC2nlHD437A/0h45JAIy8n1Wr8 Ms/VKAmCMJSIIHZ9M9r7ELHHq3tExyaKXLdtdHND4yGakNhN3krpnSjtcYrP2oRe1rsM mj/4laauV2q/OcuKciOHTOFkih9T3+qRddpEY++sSp25Yi0ER9TO5AQcDEv+6pOFMG+S 65kqI6GXLe0xc+J1gpsPPsBAkOco32+wntZG8Eo9hS5rBK9oAKkYxcA0KhRMRX8kanMx GPRBTwsB0tKIEkl1vstZKy8ZmloQeyNBBO68pWgVQhDDja+zLOsfDbVfGWIs9/dJBZDT MV9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=ecb58dV5s1Q6ZkbAHlIZLthrr/+0Gu1KFqXCmL6iNQo=; b=UBgcWC1a5aNEsymmKlvg+ChQSIOn6/9d3hNe35S4TAQ/X+JOkcvTQ2tdS6YZ4nDEhp 8k7pnoy3Pkzhr3MB5FnVLHwW76jj10Yi9dk31CnJK4NmZVtEjqxUBDtQ8ouWD1sGdU2d UpXqTCYWE+MJ1i8pnmBfPKL9rSHRZVY6xf4M0Gi5OtlJxKpPeM+qXpHPcsQT1k67DNps kvo64mq017YNMqcYv7yvtzqDpSmjGMkyYO2wyEqwNBCT23DE9btx1R3HYvJtsXbC9KdH Tc3aJGEsYb1XPdMcGRqpyHLqcPyvPJoe2GLfMRmgtxoGnAEeuc1MaAzKFdhzppURipBd xmkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@alien8.de header.s=dkim header.b=EGQ3ALvr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alien8.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id us11si1187468ejb.665.2021.01.13.10.09.42; Wed, 13 Jan 2021 10:10:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@alien8.de header.s=dkim header.b=EGQ3ALvr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alien8.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728188AbhAMSGu (ORCPT + 99 others); Wed, 13 Jan 2021 13:06:50 -0500 Received: from mail.skyhub.de ([5.9.137.197]:39242 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727446AbhAMSGu (ORCPT ); Wed, 13 Jan 2021 13:06:50 -0500 Received: from zn.tnic (p200300ec2f0b5c0053dfdcdd1c139e2a.dip0.t-ipconnect.de [IPv6:2003:ec:2f0b:5c00:53df:dcdd:1c13:9e2a]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.skyhub.de (SuperMail on ZX Spectrum 128k) with ESMTPSA id DEB8D1EC0423; Wed, 13 Jan 2021 19:06:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alien8.de; s=dkim; t=1610561169; 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:in-reply-to:in-reply-to: references:references; bh=ecb58dV5s1Q6ZkbAHlIZLthrr/+0Gu1KFqXCmL6iNQo=; b=EGQ3ALvr+Scr+so54frXBNdjhWypBvU/uP1MiT4VYSvV7xPo5OVAgYrhluTHlOUTXuIJLb Pb9jag1rkd40sl+NRhw8567fnNimM7dCn6pISiUk5O2r3mDeGyd1tDDiL8Yv+K+7Ovvm+Z wmlXWPQwvOx+lrFjX+yd9Js2FuERufw= Date: Wed, 13 Jan 2021 19:06:09 +0100 From: Borislav Petkov To: Masami Hiramatsu Cc: Andy Lutomirski , X86 ML , LKML , Arnaldo Carvalho de Melo Subject: Re: [PATCH v1 03/19] x86/insn: Add an insn_decode() API Message-ID: <20210113180609.GH16960@zn.tnic> References: <20201223174233.28638-1-bp@alien8.de> <20201223174233.28638-4-bp@alien8.de> <20201228101510.49082d470ed328d81486ef04@kernel.org> <20201229200654.GF29947@zn.tnic> <20201230180052.7e1931b4e1b17079023b65b7@kernel.org> <20201230092833.GE22022@zn.tnic> <20210106142114.5e9ce2cc107f6386e36b4ff4@kernel.org> <20210108185950.GG4042@zn.tnic> <20210112203446.04c37db1cbb329f37b4b4a5c@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20210112203446.04c37db1cbb329f37b4b4a5c@kernel.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 12, 2021 at 08:34:46PM +0900, Masami Hiramatsu wrote: > Or, add one definition before that line. > > #define INSN_MODE_KERN -1 /* __ignore_sync_check__ */ I like that idea, thanks! And it seems to work: --- diff --git a/arch/x86/include/asm/inat.h b/arch/x86/include/asm/inat.h index 4cf2ad521f65..b56c5741581a 100644 --- a/arch/x86/include/asm/inat.h +++ b/arch/x86/include/asm/inat.h @@ -6,7 +6,7 @@ * * Written by Masami Hiramatsu */ -#include +#include /* __ignore_sync_check__ */ /* * Internal bits. Don't use bitmasks directly, because these bits are diff --git a/arch/x86/include/asm/insn.h b/arch/x86/include/asm/insn.h index 9f1910284861..6df0d3da0d86 100644 --- a/arch/x86/include/asm/insn.h +++ b/arch/x86/include/asm/insn.h @@ -8,7 +8,7 @@ */ /* insn_attr_t is defined in inat.h */ -#include +#include /* __ignore_sync_check__ */ struct insn_field { union { diff --git a/arch/x86/lib/inat.c b/arch/x86/lib/inat.c index 12539fca75c4..b0f3b2a62ae2 100644 --- a/arch/x86/lib/inat.c +++ b/arch/x86/lib/inat.c @@ -4,7 +4,7 @@ * * Written by Masami Hiramatsu */ -#include +#include /* __ignore_sync_check__ */ /* Attribute tables are generated from opcode map */ #include "inat-tables.c" diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c index 2ab1d0256313..aa6ee796a987 100644 --- a/arch/x86/lib/insn.c +++ b/arch/x86/lib/insn.c @@ -10,13 +10,13 @@ #else #include #endif -#include -#include +#include /*__ignore_sync_check__ */ +#include /* __ignore_sync_check__ */ #include #include -#include +#include /* __ignore_sync_check__ */ /* Verify next sizeof(t) bytes can be on the same instruction */ #define validate_next(t, insn, n) \ @@ -748,6 +748,8 @@ int insn_decode(struct insn *insn, const void *kaddr, int buf_len, enum insn_mod { int ret; +/* #define INSN_MODE_KERN -1 __ignore_sync_check__ mode is only valid in the kernel */ + if (m == INSN_MODE_KERN) insn_init(insn, kaddr, buf_len, IS_ENABLED(CONFIG_X86_64)); else diff --git a/tools/arch/x86/include/asm/inat.h b/tools/arch/x86/include/asm/inat.h index 877827b7c2c3..a61051400311 100644 --- a/tools/arch/x86/include/asm/inat.h +++ b/tools/arch/x86/include/asm/inat.h @@ -6,7 +6,7 @@ * * Written by Masami Hiramatsu */ -#include "inat_types.h" +#include "inat_types.h" /* __ignore_sync_check__ */ /* * Internal bits. Don't use bitmasks directly, because these bits are diff --git a/tools/arch/x86/include/asm/insn.h b/tools/arch/x86/include/asm/insn.h index f8772b371452..4f219e3ae817 100644 --- a/tools/arch/x86/include/asm/insn.h +++ b/tools/arch/x86/include/asm/insn.h @@ -8,7 +8,7 @@ */ /* insn_attr_t is defined in inat.h */ -#include "inat.h" +#include "inat.h" /* __ignore_sync_check__ */ struct insn_field { union { diff --git a/tools/arch/x86/lib/inat.c b/tools/arch/x86/lib/inat.c index 4f5ed49e1b4e..dfbcc6405941 100644 --- a/tools/arch/x86/lib/inat.c +++ b/tools/arch/x86/lib/inat.c @@ -4,7 +4,7 @@ * * Written by Masami Hiramatsu */ -#include "../include/asm/insn.h" +#include "../include/asm/insn.h" /* __ignore_sync_check__ */ /* Attribute tables are generated from opcode map */ #include "inat-tables.c" diff --git a/tools/arch/x86/lib/insn.c b/tools/arch/x86/lib/insn.c index c224e1569034..13e8615edc15 100644 --- a/tools/arch/x86/lib/insn.c +++ b/tools/arch/x86/lib/insn.c @@ -10,13 +10,13 @@ #else #include #endif -#include "../include/asm/inat.h" -#include "../include/asm/insn.h" +#include "../include/asm/inat.h" /* __ignore_sync_check__ */ +#include "../include/asm/insn.h" /* __ignore_sync_check__ */ #include #include -#include "../include/asm/emulate_prefix.h" +#include "../include/asm/emulate_prefix.h" /* __ignore_sync_check__ */ /* Verify next sizeof(t) bytes can be on the same instruction */ #define validate_next(t, insn, n) \ @@ -748,6 +748,8 @@ int insn_decode(struct insn *insn, const void *kaddr, int buf_len, enum insn_mod { int ret; +#define INSN_MODE_KERN -1 /* __ignore_sync_check__ mode is only valid in the kernel */ + if (m == INSN_MODE_KERN) insn_init(insn, kaddr, buf_len, IS_ENABLED(CONFIG_X86_64)); else diff --git a/tools/objtool/sync-check.sh b/tools/objtool/sync-check.sh index 606a4b5e929f..4bbabaecab14 100755 --- a/tools/objtool/sync-check.sh +++ b/tools/objtool/sync-check.sh @@ -16,11 +16,14 @@ arch/x86/include/asm/emulate_prefix.h arch/x86/lib/x86-opcode-map.txt arch/x86/tools/gen-insn-attr-x86.awk include/linux/static_call_types.h -arch/x86/include/asm/inat.h -I '^#include [\"<]\(asm/\)*inat_types.h[\">]' -arch/x86/include/asm/insn.h -I '^#include [\"<]\(asm/\)*inat.h[\">]' -arch/x86/lib/inat.c -I '^#include [\"<]\(../include/\)*asm/insn.h[\">]' -arch/x86/lib/insn.c -I '^#include [\"<]\(../include/\)*asm/in\(at\|sn\).h[\">]' -I '^#include [\"<]\(../include/\)*asm/emulate_prefix.h[\">]' " + +SYNC_CHECK_FILES=' +arch/x86/include/asm/inat.h +arch/x86/include/asm/insn.h +arch/x86/lib/inat.c +arch/x86/lib/insn.c +' fi check_2 () { @@ -63,3 +66,9 @@ while read -r file_entry; do done <string syscall @@ -129,6 +136,10 @@ for i in $FILES; do check $i -B done +for i in $SYNC_CHECK_FILES; do + check $i '-I "^.*\/\*.*__ignore_sync_check__.*\*\/.*$"' +done + # diff with extra ignore lines check arch/x86/lib/memcpy_64.S '-I "^EXPORT_SYMBOL" -I "^#include " -I"^SYM_FUNC_START\(_LOCAL\)*(memcpy_\(erms\|orig\))"' check arch/x86/lib/memset_64.S '-I "^EXPORT_SYMBOL" -I "^#include " -I"^SYM_FUNC_START\(_LOCAL\)*(memset_\(erms\|orig\))"' @@ -137,10 +148,6 @@ check include/uapi/linux/mman.h '-I "^#include <\(uapi/\)*asm/mman.h>"' check include/linux/build_bug.h '-I "^#\(ifndef\|endif\)\( \/\/\)* static_assert$"' check include/linux/ctype.h '-I "isdigit("' check lib/ctype.c '-I "^EXPORT_SYMBOL" -I "^#include " -B' -check arch/x86/include/asm/inat.h '-I "^#include [\"<]\(asm/\)*inat_types.h[\">]"' -check arch/x86/include/asm/insn.h '-I "^#include [\"<]\(asm/\)*inat.h[\">]"' -check arch/x86/lib/inat.c '-I "^#include [\"<]\(../include/\)*asm/insn.h[\">]"' -check arch/x86/lib/insn.c '-I "^#include [\"<]\(../include/\)*asm/in\(at\|sn\).h[\">]" -I "^#include [\"<]\(../include/\)*asm/emulate_prefix.h[\">]"' # diff non-symmetric files check_2 tools/perf/arch/x86/entry/syscalls/syscall_64.tbl arch/x86/entry/syscalls/syscall_64.tbl -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette