From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933011AbcCKWL6 (ORCPT ); Fri, 11 Mar 2016 17:11:58 -0500 Received: from mail-am1on0076.outbound.protection.outlook.com ([157.56.112.76]:48832 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932084AbcCKWLx (ORCPT ); Fri, 11 Mar 2016 17:11:53 -0500 Authentication-Results: spf=fail (sender IP is 12.216.194.146) smtp.mailfrom=ezchip.com; mellanox.com; dkim=none (message not signed) header.d=none;mellanox.com; dmarc=fail action=none header.from=mellanox.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 v11 10/13] arch/x86: enable task isolation functionality Date: Fri, 11 Mar 2016 17:10:20 -0500 Message-ID: <1457734223-26209-11-git-send-email-cmetcalf@mellanox.com> X-Mailer: git-send-email 2.7.2 In-Reply-To: <1457734223-26209-1-git-send-email-cmetcalf@mellanox.com> References: <1457734223-26209-1-git-send-email-cmetcalf@mellanox.com> X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:12.216.194.146;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(106466001)(2201001)(86362001)(92566002)(85426001)(36756003)(47776003)(586003)(2906002)(6806005)(960300001)(50226001)(33646002)(229853001)(105606002)(48376002)(50986999)(87936001)(76176999)(1096002)(5003940100001)(42186005)(1220700001)(4326007)(50466002)(5001970100001)(189998001)(107886002)(2950100001)(4001430100002)(19580395003)(19580405001)(5008740100001)(104016004)(11100500001)(5001770100001)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR05MB1692;H:ld-1.internal.tilera.com;FPR:;SPF:Fail;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD047;1:zUuhoV4zI6ZzpsII9co1N4ASzqe0++ADrCzA9Ev7ZAFmz6Hk3IfFPJ9iSJ3QfDDlpaD8TQlRS3KQd2krV8ULD6/3XvuaJ6m3HPL646qw9OR6y2dPoxhnPnSCZj3c9MpbxWpNC1QJKsGb41bwNItNLcSG37IySdeB+XupMv2aD7Ibttt0sXruaYwrRF5mf2xcJgDh+B6VFd4Ut6fGwzIIV7/M/yIA/iNI2N0X7oJaFeDundvbof8eMbbAqLh5t1RwZvLgI9tG3SBDDI/Y4SiGMYpoF9H2YqIU/sBHBwT2v3ZnrxQ0Ro4COctyrgy9fHrcLr1zw6viCEcF+vkj2vvQvzA1sXx+Wb2xW7tQAlEMmXDo5zkscvH7WwcdI50v+HGJTnxTijLrm0wR0SB/KZJbHEjPXk599CoSucIL7CLQiHmxvzB8C0C5OglZeF7LbmAlCLdRD59oPEBfNoE0a7xkfSzge5EDVw+WXOulTexw3kGv1KGseRyFUy633u9910HqtGB/tl0kcjYKImr6u+NTYd9jT1U0/HS29h4aJQlP5ySfVzKcHMLevQE6LmWJcNv9 MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: cc6a227f-6ffe-46c4-f02a-08d349fa2456 X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1692;2:yTAzlnh5CNPqGqm+NhAD7wOH3XLq6iiBnHDlTZxhz5AslqNBUMNWY+VGv1Si/FTYYnvbM7MlmzDKGOfWIBWeHFvfv/kKH51LRJRWrslVBXU85Zv8ZVAmXDrnPktp8MyFe9XE9q2tDcKurdwWBSPprVw+yVesBGrrb7ytb/vm+iXFoOliDOxIOHUXKmDd/rPl;3:X+oiOx6cZyy2g5stXE3RSDoUFFn3BPmjxxgcBjilFPngxNhmg6mOArB1Y1pxwQwiszRwh3JOv5nX1i9RUc/DaZRwDCeJGX2YuI5dKB8uzvS5zGDynG8xnPZ8bnSQr0NUA2wvGhvyv8HXJFHgc0/LSDUVpiFiATk24xyMXHqc4anUHCkarQNIYoqKI265VkhO3O1ebJQ3YbJNHPLp9CU9WjuIVCwz0eWOKpf9BPdheJI=;25:DBdJINWXdhNaBzFtEnAwA5kyqc9B+NT+vjuzfSSkvaFxg5KpfCBCJhFyMTkVu+zJ4uIE9FaAzqPrC+yNsvWxs7VnOm1bcdNyGmtBIH7+k5ztBi5uJ2YFAzhN7XVuqDlct5gTNP/CirnLZFNyYCE3rvU7vws84bQmIRf7HAzHcm5Z7p90m08UwOSlDoghuNzfvhwzAXm3p6EVV+6Nv+Lew9NAAuS8vssn5ZpdJf3yR4HVGh+4rLGFOGpVRyZIx9trmakmmc13ciFjGNVwgLcVR+zpiW88ZwgYL0Gzgp7WTz3CtuEYpPAFrzaVN101UzXxnk92+2qlcBIc4hR9WJT3kA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR05MB1692; X-MLNXRule-EZCH-Linux: Rule triggered X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1692;20:pg7I7X68derXqK5yh4m0F9uFADl8vfhtDgdKzQx6rEG/cNSiCI/ywM3pRy4d4qXwI8PhzwmErEbui9IpTFN7o2BvAq5tJfqElMyhCZBRejQpVJitRYDJmCWST4b3YWd+lfNw/d0YqwxFr067hc3A046YR/ye0kUfqeKqTABGmoNGJfJkPwrwrPJpBajZTrKhcILH9jwMpLN8lUGGVMYUjlnLruVHWo1WFhq9rBa0ovKqBcAjTBoRhbIVUNuoFU1eREoim+nFuvFxs/ZhAaYWbtxZ7nSkmYnyUeTZ5qiucNMBLEBsn6pwmhhE2wKBi4DP3Q9tzZ9OEJE0em28qD6k8Ln5EEzgIbm18eeWi1SX9GEG9TlYlm2zzW9nqW+xHLJCIpFWrVnngdWiwQeF0GszIxUfI81GvLfqeza9qvspojsKSR82cx9CBRpYwNhM5Fa6qEzOb0EqLOOMD+YInhmdFLeoJUQMMjbSq3FYOfLML6ZcmZsoa5gLrX+nl7lLrZu7 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(13024025)(13018025)(8121501046)(13015025)(13017025)(13023025)(3002001)(10201501046);SRVR:HE1PR05MB1692;BCL:0;PCL:0;RULEID:;SRVR:HE1PR05MB1692; X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1692;4:QFGNMg5CEjwHFsa2t4/8P3s/hLQhtdICzSM0df7/Do0qe/hvMgWm2YTX9OUFNBuvysHGz/nofrHkKWq4/P7whKh8Wg9ns6wMHEUBdIhcp45D26BUH7OpQ6CNy8137UsySipeafqV92Y2LYbLXO91kI+WmVfsAZh3s7+mj7gorGOjErQ7Pd16bKaseNQHgBDbh6MVvjawGPZScARct9QKjAn1wFPS3ZGXEC6/+yK3Q2gPfVYk4t/UHTTR0tMRLSdWDpkK7R42gJnuH0NP4EpZFuTBlTjxpX/Fdfq8CC3CWahj3ubtHT1/x5M/jghTPwT0l+yxAlW90bQDEjYzvL4du3D7potuCtVW5xPGMUlJGNPJlVf4PkJTYKcFMEQUCerTjvu+HG9Ad6DjQLmhHogFdMWBppQ17x7+8Zw6o5d2ptlJx1iPHlIzQ20cgOOQVFM40flSmtIdZPq9Qv+bduyCkg== X-Forefront-PRVS: 087894CD3C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR05MB1692;23:nHuoXivLv0OtEADKr++MapGXTzjBHE4zp5Dasuv8L?= =?us-ascii?Q?iNr56uvL/nvBrMTV/tZJymaUPYuVTnOUhevZY40lvQi5/dSRRC695r3P6IP/?= =?us-ascii?Q?iVfi49fd5CDhXo72LefXfa6aw8w2o9KaylkIp0B4Yc88ZLF84Nyxi70o9XaV?= =?us-ascii?Q?WyRcu243yUborZ8+pBJ92S0atl7t1S4feXR41JuN1Lt75O40GW7ho0SgTu3F?= =?us-ascii?Q?HK6couGDyuHVS6UXj84JhH3f8mpv8VNRR2FiHbwjeilGaMhAOrIuSWOviVqA?= =?us-ascii?Q?eL9gNtff9BTrw87n/ue9DBuvHL+D6UFbQs9SyOWE+H6j6N3zoTDkl4nlPxCC?= =?us-ascii?Q?t/YiA7o5fgvjgOgXzSN81GQCyjQWSNce1TljQIYmkxPQ/4JUm+E1V8yQLXNZ?= =?us-ascii?Q?COO+cG098FlCQUL22UuuAW46K2cQcG2gQrLOTmX6dabHhBgmSs4KqIgR1jke?= =?us-ascii?Q?2+rQAkC0tuQTsBbnsW91Rm4lxbCG+G353HFlieRe+5Dsd9TCZXmh/IUrBr71?= =?us-ascii?Q?xOBAc4hq1YyhaCJTqeqdCQ6RZ8x/NjylrMFD/bsKLpKDPIpMgeAeWX807/CB?= =?us-ascii?Q?q6XamjVXTkO7Q3idgJ/gcSil1IRin6z0v0JcwtveJvCMjIBNhQHEZnyXzPa0?= =?us-ascii?Q?o0RWL6EDQ1iE6ZPA0MBrugi1bHaTzoIHETaxSduEATaMnKoqZioAjX3vzpci?= =?us-ascii?Q?JtNsIxMHSlTyVca7qmjIBWffCBP2xj4VU4j4VCm/Dv2ZX0F2pwwq+08/dFjf?= =?us-ascii?Q?UaUfPUmI/KvTwnap+kOUcjWvXNbpHlAZmNeeIRvZU/icp3WxhmYtR+FI2Aih?= =?us-ascii?Q?gdZjNWMBRFXwcm4ANS9LqWPcFrc5uxLJ5YD4UIVfn6pvzMRHvJKjSRPe29yb?= =?us-ascii?Q?07TIwBNqC1cBeyCNRJTtutWhl2qfZ0jCeOtLwPeXDP+nThUusoPMTwGC08Uk?= =?us-ascii?Q?44HuXva87+9thTECzpQNkAHWvT3buFE9CqsKoYlOeXZMc+I47T7qNil32nXb?= =?us-ascii?Q?T+iYwsnn9r16ppD8pAWNL33YvuI6PY+Al3ryBcRW1jgQpaIMaI8JbwXWazAp?= =?us-ascii?Q?KaM2nSlnMn9fPq6j+aDhHSS8XY08Dw6CKeGrJnS+EM03uZa2NYJ5PtipE+iE?= =?us-ascii?Q?EjlOal2wQ2CR4whHL+vsWJFnKDGUu4V?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1692;5:UgHryySkrgmg3NRho+HPWBVhPolQVtW0GxdK/2dypxiLzcarsTwzoiFLXwej977/21Rbgdlkbqb4l7RoU/jzSGzfIczdZ3ykyeg/dralgjDSbsGjrIPL9dWtpTiEos4pi/PjQBuL5xDlMrTtfUK8Ig==;24:UcCIIjBEas8DF7eOU8BJVUrlaSZXCdoxkePsLrbkmlQUgnzR4/8SJLivielL3J8bCJe9mk17kUc+fXlHbc1IZUA6V+LYeASj49er645Ed84= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2016 22:11:48.2524 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[12.216.194.146];Helo=[ld-1.internal.tilera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR05MB1692 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() for TIF_TASK_ISOLATION tasks when we are checking the thread-info flags, and after we've handled the other work, call task_isolation_enter() for such tasks. 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 | 18 +++++++++++++++++- arch/x86/include/asm/thread_info.h | 2 ++ arch/x86/kernel/traps.c | 2 ++ arch/x86/mm/fault.c | 2 ++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 03663740c866..62e1e34cffc5 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -95,6 +96,13 @@ unsigned long syscall_trace_enter_phase1(struct pt_regs *regs, u32 arch) } #endif + /* In isolation mode, we may prevent the syscall from running. */ + if (work & _TIF_TASK_ISOLATION) { + if (task_isolation_syscall(regs->orig_ax) == -1) + return -1; + work &= ~_TIF_TASK_ISOLATION; + } + #ifdef CONFIG_SECCOMP /* * Do seccomp first -- it should minimize exposure of other @@ -220,7 +228,7 @@ long syscall_trace_enter(struct pt_regs *regs) #define EXIT_TO_USERMODE_LOOP_FLAGS \ (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ - _TIF_NEED_RESCHED | _TIF_USER_RETURN_NOTIFY) + _TIF_NEED_RESCHED | _TIF_USER_RETURN_NOTIFY | _TIF_TASK_ISOLATION) static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags) { @@ -254,11 +262,19 @@ static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags) if (cached_flags & _TIF_USER_RETURN_NOTIFY) fire_user_return_notifiers(); + if (cached_flags & _TIF_TASK_ISOLATION) + task_isolation_enter(); + /* Disable IRQs and retry */ local_irq_disable(); cached_flags = READ_ONCE(pt_regs_to_thread_info(regs)->flags); + /* Clear task isolation from cached_flags manually. */ + if ((cached_flags & _TIF_TASK_ISOLATION) && + task_isolation_ready()) + cached_flags &= ~_TIF_TASK_ISOLATION; + if (!(cached_flags & EXIT_TO_USERMODE_LOOP_FLAGS)) break; diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index c7b551028740..5280b92bdc3b 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -97,6 +97,7 @@ struct thread_info { #define TIF_SECCOMP 8 /* secure computing */ #define TIF_USER_RETURN_NOTIFY 11 /* notify kernel of userspace return */ #define TIF_UPROBE 12 /* breakpointed or singlestepping */ +#define TIF_TASK_ISOLATION 13 /* task isolation enabled for task */ #define TIF_NOTSC 16 /* TSC is not accessible in userland */ #define TIF_IA32 17 /* IA32 compatibility process */ #define TIF_FORK 18 /* ret_from_fork */ @@ -121,6 +122,7 @@ struct thread_info { #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_USER_RETURN_NOTIFY (1 << TIF_USER_RETURN_NOTIFY) #define _TIF_UPROBE (1 << TIF_UPROBE) +#define _TIF_TASK_ISOLATION (1 << TIF_TASK_ISOLATION) #define _TIF_NOTSC (1 << TIF_NOTSC) #define _TIF_IA32 (1 << TIF_IA32) #define _TIF_FORK (1 << TIF_FORK) diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index ade185a46b1d..bc50c275bb9b 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_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 e830c71a1323..86def02ff9a0 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_exception */ #include /* dotraplinkage, ... */ #include /* pgd_*(), ... */ @@ -1155,6 +1156,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_exception("page fault at %#lx", address); } else { if (regs->flags & X86_EFLAGS_IF) local_irq_enable(); -- 2.7.2