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 X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AB7FC4346D for ; Tue, 28 Jul 2020 15:14:48 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1A6D8204EA for ; Tue, 28 Jul 2020 15:14:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="LW4Sbnby" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1A6D8204EA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=ACULAB.COM Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:List-Subscribe:List-Help:List-Post:List-Archive:List-Unsubscribe :List-Id:MIME-Version:In-Reply-To:References:Message-ID:Date:Subject:To:From: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=KP8okKhAUcYfuppJyg5JNr84bGwQfPC4Ya4Z1yDuXvM=; b=LW4SbnbyptXXx+tLp2YBqOQT52 ivKtDJO2PVFcDOnIczKpI0drJlW8Z8XA0q6mRlXIcLGwkM27YmCajXhcLrW8ucKmgaSlbNkDYwnTP 2/v4ZCqmSIH2x1isfrzeDsg+RloVbqgqBJv06Qtt0x3K2tBj4J7XifSXhiHigI87rOw2VCOsAqIVu UcW1jAr8vPXQ8vKTUZfHhMRBtmD6M+MtBzkavhDBC2zUkkgrWHgHIwgbAmAGCBGuZPzFoN1BZS3fh kzGwXD0SEhdIgVvApzXxBlHgXNSxHYy4OXc/Axj0pRY18+wYBjBQ9Xg5XetUPPTE4NIL5uxbqde/P sIhBWPhA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k0RIB-0000Kn-Ft; Tue, 28 Jul 2020 15:13:23 +0000 Received: from eu-smtp-delivery-151.mimecast.com ([185.58.86.151]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k0RI8-0000JA-IJ for linux-arm-kernel@lists.infradead.org; Tue, 28 Jul 2020 15:13:21 +0000 Received: from AcuMS.aculab.com (156.67.243.126 [156.67.243.126]) (Using TLS) by relay.mimecast.com with ESMTP id uk-mta-235-JJgRaiMhNeeB2BdH3JMmbA-1; Tue, 28 Jul 2020 16:13:13 +0100 X-MC-Unique: JJgRaiMhNeeB2BdH3JMmbA-1 Received: from AcuMS.Aculab.com (fd9f:af1c:a25b:0:43c:695e:880f:8750) by AcuMS.aculab.com (fd9f:af1c:a25b:0:43c:695e:880f:8750) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Tue, 28 Jul 2020 16:13:12 +0100 Received: from AcuMS.Aculab.com ([fe80::43c:695e:880f:8750]) by AcuMS.aculab.com ([fe80::43c:695e:880f:8750%12]) with mapi id 15.00.1347.000; Tue, 28 Jul 2020 16:13:12 +0100 From: David Laight To: "'madvenka@linux.microsoft.com'" , "kernel-hardening@lists.openwall.com" , "linux-api@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-fsdevel@vger.kernel.org" , "linux-integrity@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-security-module@vger.kernel.org" , "oleg@redhat.com" , "x86@kernel.org" Subject: RE: [PATCH v1 0/4] [RFC] Implement Trampoline File Descriptor Thread-Topic: [PATCH v1 0/4] [RFC] Implement Trampoline File Descriptor Thread-Index: AQHWZOCQT+e4gDrzGEmP/30MMvDTCqkdFOrw Date: Tue, 28 Jul 2020 15:13:12 +0000 Message-ID: References: <20200728131050.24443-1-madvenka@linux.microsoft.com> In-Reply-To: <20200728131050.24443-1-madvenka@linux.microsoft.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.202.205.107] MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: aculab.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200728_111320_830623_1C19E9E4 X-CRM114-Status: GOOD ( 12.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: madvenka@linux.microsoft.com > Sent: 28 July 2020 14:11 ... > The kernel creates the trampoline mapping without any permissions. When > the trampoline is executed by user code, a page fault happens and the > kernel gets control. The kernel recognizes that this is a trampoline > invocation. It sets up the user registers based on the specified > register context, and/or pushes values on the user stack based on the > specified stack context, and sets the user PC to the requested target > PC. When the kernel returns, execution continues at the target PC. > So, the kernel does the work of the trampoline on behalf of the > application. Isn't the performance of this going to be horrid? If you don't care that much about performance the fixup can all be done in userspace within the fault signal handler. Since whatever you do needs the application changed why not change the implementation of nested functions to not need on-stack executable trampolines. I can think of other alternatives that don't need much more than an array of 'push constant; jump trampoline' instructions be created (all jump to the same place). You might want something to create an executable page of such instructions. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales) _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel