Received: by 10.223.176.5 with SMTP id f5csp1148881wra; Tue, 6 Feb 2018 13:38:25 -0800 (PST) X-Google-Smtp-Source: AH8x226jYPNqdQCsLxkzQkt0fZEMC0Hhtzeo89TuZQt0wR8OB/H5p4YHblIA69fpD8ZgpbBXL2Qf X-Received: by 2002:a17:902:b945:: with SMTP id h5-v6mr3892712pls.38.1517953104905; Tue, 06 Feb 2018 13:38:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517953104; cv=none; d=google.com; s=arc-20160816; b=heZpgYhv+PQjfhHv9iEogT7Kt0QSgrijUilttNTTQFc4/X0XklCXVoQQOU0aw+cSel OeCU3qk97PV0pVflH015I5/D7pUCighuoZt1t/7aTin7DaO5BdlOfkafZnpCDYVZL1bH j7mGyz6cMhPffnWGJITwn4rief8GjZYmxHS5iE848x0/aoNN4OpDBvEeQY8TvZh9uBYj o4jlbRrjkmDYAb/+138YpDM5WjHh1I1WK10pYFW6kOKR4dV6br3swWQPp2dZg3lu/mrt CnOcKYZ/vxQo0gxSp6mCylec7wYl/TaomVRyIUUdyEgiX5HE/NT4qrucM0xXJGixCGHH Fs0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=cnJYmqeAjxKeSdIx7OWdChiGS+9XEX4W+rIh/nMzRt0=; b=PYk0gibPCdou+1Rys3hb81fzA2pb/0CxJ9ox6MfJOfrAtT5Ait9785hhUYeh3FSC5r mwq/iaZw9/U6Ho7aCl8LeP1k5q5gFLtQ0Jdl2GyIHZaPXbdSPB83kCDCDH2Omq8CKdfx FR/8mdPulcRgJOpo+lCdXCrGkKXtP6cVd8dGQ8Nsv+tuB6oeFdZopGGvjyLBWTQOs/OJ kf4vJP+Q9ql9S/LnMks3FJfOqLLH+DtuTfHIn5WiOL9IzEGiYaS8Hmirs7XAztwt5+yn 49xWF8NwjbWewMg2UfG7rUJea0whk1rhmzJ1pfYRFAWT+Aa5N7acau3AJThOalOG4bcy ykLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=x1kC0GKA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 8-v6si2837192pla.105.2018.02.06.13.38.11; Tue, 06 Feb 2018 13:38:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=x1kC0GKA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753270AbeBFVhb (ORCPT + 99 others); Tue, 6 Feb 2018 16:37:31 -0500 Received: from mail-ot0-f174.google.com ([74.125.82.174]:37530 "EHLO mail-ot0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753224AbeBFVh2 (ORCPT ); Tue, 6 Feb 2018 16:37:28 -0500 Received: by mail-ot0-f174.google.com with SMTP id e64so3191841ote.4 for ; Tue, 06 Feb 2018 13:37:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=cnJYmqeAjxKeSdIx7OWdChiGS+9XEX4W+rIh/nMzRt0=; b=x1kC0GKAgVwNerSv5xtE54tW3raHPqYN9xWNg6Bw9edoSCeRMpEO4LyRTjWLWf1cMW ySMKUVMTZ4mFhjca6qEK/0fe/A6f9wcqxWkLV9YoyxoVVyH4aE3UBrCjRSqLvlZGqeOw RhnRaxdG6sAYKJN6lGzfe/rSoYiQOP62k81se3DAoUseD69qYSxK+mTrKv535Yj1Hfyi yzxqakwhCh28fAc2YqKUgUe7sc6E1J4EZ2A3DsQR5CRa1rAiKAg5J0LrIwaw1d75dfFa yrGZ3lT1ut7lUcRuHpvGvvatCzn7QP+zYJn6SwwC47iIDchtwpizav3AznDGNvBs+yMk OBJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=cnJYmqeAjxKeSdIx7OWdChiGS+9XEX4W+rIh/nMzRt0=; b=hEIHasDqvR/7W6Fq1fmS5cPZvDTJ4o7+hMzfSOk0ghYNTRWo+pj9FYZkkmsRaikr8j wrEBdDJY0dWj6xscQY1K72T3uWOaMZZN0yR6ncUcYxG1Im+YgdlhPRVn/NzVe2+tmIOE b/dwTGIYpEdnZxj6lE21uJfczHMCt1DMdz4Gf7c1YlQxgDcT87r5aOTczoJ5NiSRSMpv FKbrUYLYdlW9nHpxBHl8J5VzkwoGfavg9Oj3eOJ+qaAsBMYM5B7iJke8uYBCgh9eR04+ JnMmR7tewarNVi7Op5i/WCFXATjtIfzBv0KTopdMnBMeg2ToKwrk4/eg5SkOqDJV0JSh u6Uw== X-Gm-Message-State: APf1xPDfJv9wf92AsIE2SjixKJkBtuoKYqD4eGuEVFyxJSWAoyCmyPMy Q53HNLulZcJ8IltXkbc9KxI3rzjyePEO0BRenaMQBA== X-Received: by 10.157.35.61 with SMTP id j58mr2889599otb.220.1517953047410; Tue, 06 Feb 2018 13:37:27 -0800 (PST) MIME-Version: 1.0 Received: by 10.157.62.91 with HTTP; Tue, 6 Feb 2018 13:37:27 -0800 (PST) In-Reply-To: References: <151632009605.21271.11304291057104672116.stgit@dwillia2-desk3.amr.corp.intel.com> <151632014097.21271.16980532033566583357.stgit@dwillia2-desk3.amr.corp.intel.com> <20180206192925.qkmghwsbaysr4iv2@hermes.olymp> From: Dan Williams Date: Tue, 6 Feb 2018 13:37:27 -0800 Message-ID: Subject: Re: [PATCH v4 07/10] x86: narrow out of bounds syscalls to sys_read under speculation To: Linus Torvalds Cc: Andy Lutomirski , Luis Henriques , Linux Kernel Mailing List , linux-arch , Kernel Hardening , Greg KH , X86 ML , Ingo Molnar , "H. Peter Anvin" , Thomas Gleixner , Andrew Morton , Alan Cox Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 6, 2018 at 12:58 PM, Linus Torvalds wrote: > On Tue, Feb 6, 2018 at 12:49 PM, Andy Lutomirski wrote: >> >> Can you use @cc to make an asm statement that outputs both the masked >> array index and the "if" condition? I can never remember the syntax, >> but something like: > > Yes. Although I'd actually suggest just using an "asm goto" if we > really want to optimize this. Give the "index_mask_nospec()" a third > argument that is the label to jump to for overflow. > > Then you can just decide how to implement it best for any particular > architecture (and compiler limitation). At that point we're basically just back to the array_ptr() version that returned a sanitized pointer to an array element. call = array_ptr(sys_call_table, nr & __SYSCALL_MASK, NR_syscalls); if (likely(call)) regs->ax = (*call)( regs->di, regs->si, regs->dx, regs->r10, regs->r8, regs->r9); e1e: ba 4d 01 00 00 mov $0x14d,%edx e23: 48 39 d5 cmp %rdx,%rbp e26: 48 19 d2 sbb %rdx,%rdx call = array_ptr(sys_call_table, nr & __SYSCALL_MASK, NR_syscalls); e29: 48 21 d5 and %rdx,%rbp e2c: 48 8d 04 ed 00 00 00 lea 0x0(,%rbp,8),%rax e33: 00 if (likely(call)) e34: 48 21 d0 and %rdx,%rax e37: 74 1e je e57 regs->ax = (*call)( e39: 48 8b 4b 38 mov 0x38(%rbx),%rcx e3d: 48 8b 53 60 mov 0x60(%rbx),%rdx e41: 48 8b 73 68 mov 0x68(%rbx),%rsi e45: 48 8b 7b 70 mov 0x70(%rbx),%rdi e49: 4c 8b 4b 40 mov 0x40(%rbx),%r9 e4d: 4c 8b 43 48 mov 0x48(%rbx),%r8 e51: ff 10 callq *(%rax) e53: 48 89 43 50 mov %rax,0x50(%rbx) e57: 65 48 8b 04 25 00 00 mov %gs:0x0,%rax