From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753227AbcADTfv (ORCPT ); Mon, 4 Jan 2016 14:35:51 -0500 Received: from mail-am1on0058.outbound.protection.outlook.com ([157.56.112.58]:2177 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753102AbcADTfg (ORCPT ); Mon, 4 Jan 2016 14:35:36 -0500 Authentication-Results: spf=fail (sender IP is 12.216.194.146) smtp.mailfrom=ezchip.com; ezchip.com; dkim=none (message not signed) header.d=none;ezchip.com; dmarc=none action=none header.from=ezchip.com; From: Chris Metcalf To: Gilad Ben Yossef , Steven Rostedt , Ingo Molnar , Peter Zijlstra , Andrew Morton , "Rik van Riel" , Tejun Heo , Frederic Weisbecker , Thomas Gleixner , "Paul E. McKenney" , Christoph Lameter , Viresh Kumar , Catalin Marinas , Will Deacon , Andy Lutomirski , "H. Peter Anvin" , , CC: Chris Metcalf Subject: [PATCH v9 07/13] arch/x86: enable task isolation functionality Date: Mon, 4 Jan 2016 14:34:45 -0500 Message-ID: <1451936091-29247-8-git-send-email-cmetcalf@ezchip.com> X-Mailer: git-send-email 2.1.2 In-Reply-To: <1451936091-29247-1-git-send-email-cmetcalf@ezchip.com> References: <1451936091-29247-1-git-send-email-cmetcalf@ezchip.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD013;1:aWj9EH1G67OLtVRhT+UWE4V2c/BaOT2VSiqRLD3SAIgMZx8Fe+jBi+fpvRRTXV1HapAL2fFXX1LY7mMVqj3DrEMzxbTdXKn7mPLAK0f5NdEMQvXqjIDrEV7LrkaBWhJFNwv+UuWR+3VgUEJ6zdoDza+olIi0uu2iiIQ/10rAcvXu8xiQt7sGKpcsTW4sPT80SKIzaekj71dnTBSiMqoWWc8E25JvMte00zIK2+Q9OcqNE6Gz5siEYwPeTKSGJWNrEeAZYyQz1mM2vR8WhH6lOKDMNGKZan55eRKuvAl0GGA9S9vfbx3CRjzaPFiBrtV7uWk5l7dWWmPpkdGISVmIlqltWU/eEz9mt2EsifG7oQB/TGOb6Q8YqOXww1Ojg+Sw X-Forefront-Antispam-Report: CIP:12.216.194.146;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(4001430100002)(33646002)(92566002)(107886002)(1220700001)(50986999)(2201001)(5001770100001)(189998001)(5001970100001)(5008740100001)(586003)(104016004)(5003940100001)(76176999)(1096002)(4326007)(105606002)(50466002)(19580395003)(6806005)(11100500001)(42186005)(36756003)(48376002)(87936001)(50226001)(86362001)(229853001)(2950100001)(85426001)(575784001)(19580405001)(106466001)(47776003)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB4PR02MB127;H:ld-1.internal.tilera.com;FPR:;SPF:Fail;PTR:wb-fw1.tilera.com;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB127;2:PEDGn4HEEoblln4I/0m7hj1hbLtxdva+cGQsKohUlcDmFeIIG8J+h+UY3p+uqeotyBVeNAnDgEmkLQWi1L2kqyEG2EBkknb6Xn3JtrjYbI14Ia0SFKZM0caK2IijSBUfrfu1QGWHV3v5eiZSG9lVeA==;3:sjn1L0M6B7S8QX9D1WW3Gl4UqiOkCyeTRr3OtZ8E9rYw6cMsWGfPZ8RmrGUaPaoBXLUn8Os5ubk5ukdLWFSbfDMkIUclmd8HMh9gWDX6YbPpve053ENwucp8Kj0zY4xUeUIC5MwWlnZ2UId2jGEZKQYHA+a07AQNEJhVrBZRHDTGxaaD7raKM8mNVUMhJ3YmwZD3uQ8krgpcyzwteHzTH5cgeGZBSWdnkr2QxxelysY=;25:KZlSEeaWda5F7lPfeo2EPnSh/zzxEut9w/HEk3WFSZ7Dkmtf3FmPH9QHOqwRYxyD7aiw4v1Cp+Tb9k3sxYhX4E0lkl98FBKPp4MAgM3y9yx4lH7T0yzj5FkTr0c1iK5Z3XV/SFxKeN+KLtEBc6ShFQXggO5TYGa5c/EiG3ZPCRvq+4AyjYaxah2AT3gWeaEXUi0xePa9+ePgpxq4XKjaRjzx9ISlolEYscFkIb9UchAysDHWjEnxkU/jV4e/9GUKJ8KXqZ0MdlvKcdD6q2Cqng==;20:c+VoZ6hKv+HYfMNqTg0iCOtXp7jOa3xuwcGdgm+5iDyY+al8xG/xiJkByv+Xid1MGykds0G7ktkjwg6XdEwrYPBcr7ibE0jY1whfzSW42/JR32EZCNAvrPchb+qxvRFwU3t2cZvHzuBn1X/u4dU7jotLJBvEWyphOqta9PjKgIk= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB4PR02MB127; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(121898900299872); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001);SRVR:DB4PR02MB127;BCL:0;PCL:0;RULEID:;SRVR:DB4PR02MB127; X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB127;4:LtHWmBbnofEX1Tyi1Z21VlEyoVJqhVb+epSWfGcIjMGZxGp6K068byywlbd6Anj87bH6AqT2KdD8uptwA+xaloL9gljbgoDfs4C8xPwcvDWbygckq/yKKOIeuwJInUhoXqGILK/JwNcE8otgqRnCx9I5BSWeFCNrURyuVFKCdLc/rAiL7L8qAO4ltoKttvUHcHzAZH5ONukSFFsUL4F+2bGDSdWHyEWoOadB6bkfh5rg9c7MC9+/wERa5GlHZBBQ20RbPnSw/nW7UW6E+BlOMKfG3rLCmmShWVVdDzsQoMUQ8vXTluuFe2BO8Dnanf1fJENJCZJWHISolurHWtDVuyk28gnOqPEyiuXLxFhHWYisRLkGuB+yoE6l/rPSbSqSYYA+AoEYtSNhbJH8+idm/Eemqeg9iTrbApr6WQ/beONSWKY5litztI6eLnDsys7d X-Forefront-PRVS: 08118EFC2B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB4PR02MB127;23:40PRHiA7xLQ+nMAaQuYbBJzax67vFcCDSjo6o7nyFD?= =?us-ascii?Q?EGVm0ew7zzdcsCZLk9Qtkj2ZBxlQPf3YjHvDhXfTycGafSoiGLuxp0Wn4CY8?= =?us-ascii?Q?1diRE2r0hb6v1V6RP//cGhFn4/sZyYFQtv7JzDny+Z83qqGb23ErD5WD14IJ?= =?us-ascii?Q?gEd8Icxk5qZACLwJkAYzvgnoNf02kHeeLxj4TLBz6SYDPapIY6BIHc9GmcjR?= =?us-ascii?Q?hVM1Te9Jef5YRsppimVulqaSFlTgABvIjGgVndlc+/fU7qQ98RzbN5fQApus?= =?us-ascii?Q?dSNSYYk30X1rc0JB1cS2NV63v6Wg9vnOVfVhOTyk2m592a23ZGkOg4DfoAUc?= =?us-ascii?Q?UkmP+JTx5VN/G7RJXG/njQMiwmoefkGyU5CibHu/RP10UP7rkec4oEWf/zjD?= =?us-ascii?Q?qtuOY8Glj3EDiLxfvYmsyRvicB8q3zzQgA9qdIgxlnliqaiTE3DUKrWtBrEF?= =?us-ascii?Q?M5Lx7geuIAkY/GXRofaMIhiQTFRQGKt0luVyzDV6ED0kf99l6wgAy03NeUFe?= =?us-ascii?Q?WQ+0tIObivbrrTm5FP1vHp9ZPQbcljegRyN3Nuy37PxwD6PW36CMYnHdQ+iW?= =?us-ascii?Q?yhc5mKVFW0/wQWCYT8Wa0sLlau/Mwgt/1sf5P1QdvHMBtKC6Gq8w0opz1Q20?= =?us-ascii?Q?tCCrpFIx7YIQVwAPICTHnSgPmT0aaMI7IcHES8rjL8GHXULX1iH8HyDRUxmo?= =?us-ascii?Q?x/MSgvYwKgTMNuVOewSoZi23zrebuxy0lvYEViu+51rzjsb2qJv5DXVweC9T?= =?us-ascii?Q?oI50h6AShvCbxCYVLawN2wNjJN7w75Pj1CYEbI6QTK8jrnSG/HcR33veT67+?= =?us-ascii?Q?xHV0j+COmucNrr+okSjBlmruwVt59I6BLtLoATUbK4+Nb6RTskIh5LGVYsY4?= =?us-ascii?Q?D0UNBsNgaLpDsNHcAhKIV31ETOwzwsUvFxpwz+VpbxvMHBnE+SDEP+vUG/gT?= =?us-ascii?Q?6tc8EUmq8+q+6y3L7xHMZqYJbgEYwrJvYpowg+jtfAWXCIAav2caBLEkniTn?= =?us-ascii?Q?1YLfF5Unn+ZpzBWrQjDv7xNeclCDVNhq8IixlMMWFHOEN6uU8SjNIc0/OQ61?= =?us-ascii?Q?pLl9GgHn4axsZ0p36Rci/W2OZg+IqZyd/RqAmlFHlzI8T6Wk8DvBKoFji3J2?= =?us-ascii?Q?ZtGzq2x/cvcs85tun3+8OHnsRDLD/DIFgTY226ScLZYHFJtwJibg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB127;5:UXTfWREyz9MebXlP8u0WRez1I3E7otOL/moVkMBB/NQjou7f+9Sioj/u5UWNX7eGwiPhgFI+fC1TshA/og7s6yR3PaY+12Wpv1uXNOz8TxMnb/mPSYvlAfRo8jqlUAtbrYzpWyuQIsIdNLC5RUv09w==;24:ZThOY/SSc0FwGlyEWE/GGeJyn/tnQ83+ONN8/c5Qs8tb5RjuE5cLUMbwDjNBbsB+Iwaz0jGPvBJiniNuqGL9FZAe2XaFYWIav6LTMgUmleA= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ezchip.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2016 19:35:33.0069 (UTC) X-MS-Exchange-CrossTenant-Id: 0fc16e0a-3cd3-4092-8b2f-0a42cff122c3 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0fc16e0a-3cd3-4092-8b2f-0a42cff122c3;Ip=[12.216.194.146];Helo=[ld-1.internal.tilera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR02MB127 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In prepare_exit_to_usermode(), call task_isolation_ready() when we are checking the thread-info flags, and after we've handled the other work, call task_isolation_enter() unconditionally. In syscall_trace_enter_phase1(), we add the necessary support for strict-mode detection of syscalls. We add strict reporting for the kernel exception types that do not result in signals, namely non-signalling page faults and non-signalling MPX fixups. Signed-off-by: Chris Metcalf --- arch/x86/entry/common.c | 10 +++++++++- arch/x86/kernel/traps.c | 2 ++ arch/x86/mm/fault.c | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index a89fdbc1f0be..75958a6b5112 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -91,6 +92,10 @@ unsigned long syscall_trace_enter_phase1(struct pt_regs *regs, u32 arch) */ if (work & _TIF_NOHZ) { enter_from_user_mode(); + if (task_isolation_check_syscall(regs->orig_ax)) { + regs->orig_ax = -1; + return 0; + } work &= ~_TIF_NOHZ; } #endif @@ -254,12 +259,15 @@ static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags) if (cached_flags & _TIF_USER_RETURN_NOTIFY) fire_user_return_notifiers(); + task_isolation_enter(); + /* Disable IRQs and retry */ local_irq_disable(); cached_flags = READ_ONCE(pt_regs_to_thread_info(regs)->flags); - if (!(cached_flags & EXIT_TO_USERMODE_LOOP_FLAGS)) + if (!(cached_flags & EXIT_TO_USERMODE_LOOP_FLAGS) && + task_isolation_ready()) break; } diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index ade185a46b1d..82bf53ec1e98 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef CONFIG_EISA #include @@ -398,6 +399,7 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code) case 2: /* Bound directory has invalid entry. */ if (mpx_handle_bd_fault()) goto exit_trap; + task_isolation_check_exception("bounds check"); break; /* Success, it was handled */ case 1: /* Bound violation. */ info = mpx_generate_siginfo(regs); diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index eef44d9a3f77..7b23487a3bd7 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -14,6 +14,7 @@ #include /* prefetchw */ #include /* exception_enter(), ... */ #include /* faulthandler_disabled() */ +#include /* task_isolation_check_exception */ #include /* dotraplinkage, ... */ #include /* pgd_*(), ... */ @@ -1148,6 +1149,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, local_irq_enable(); error_code |= PF_USER; flags |= FAULT_FLAG_USER; + task_isolation_check_exception("page fault at %#lx", address); } else { if (regs->flags & X86_EFLAGS_IF) local_irq_enable(); -- 2.1.2