Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c02fbae7a0754a58884b370657575845@AcuMS.aculab.com>
Date: Mon, 3 Aug 2020 08:08:21 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Pavel Machek' <pavel@....cz>
CC: 'Andy Lutomirski' <luto@...nel.org>, "madvenka@...ux.microsoft.com"
	<madvenka@...ux.microsoft.com>, Kernel Hardening
	<kernel-hardening@...ts.openwall.com>, Linux API <linux-api@...r.kernel.org>,
	linux-arm-kernel <linux-arm-kernel@...ts.infradead.org>, Linux FS Devel
	<linux-fsdevel@...r.kernel.org>, linux-integrity
	<linux-integrity@...r.kernel.org>, LKML <linux-kernel@...r.kernel.org>, "LSM
 List" <linux-security-module@...r.kernel.org>, Oleg Nesterov
	<oleg@...hat.com>, X86 ML <x86@...nel.org>
Subject: RE: [PATCH v1 0/4] [RFC] Implement Trampoline File Descriptor

From: Pavel Machek <pavel@....cz>
> Sent: 02 August 2020 12:56
> Hi!
> 
> > > This is quite clever, but now I???m wondering just how much kernel help
> > > is really needed. In your series, the trampoline is an non-executable
> > > page.  I can think of at least two alternative approaches, and I'd
> > > like to know the pros and cons.
> > >
> > > 1. Entirely userspace: a return trampoline would be something like:
> > >
> > > 1:
> > > pushq %rax
> > > pushq %rbc
> > > pushq %rcx
> > > ...
> > > pushq %r15
> > > movq %rsp, %rdi # pointer to saved regs
> > > leaq 1b(%rip), %rsi # pointer to the trampoline itself
> > > callq trampoline_handler # see below
> >
> > For nested calls (where the trampoline needs to pass the
> > original stack frame to the nested function) I think you
> > just need a page full of:
> > 	mov	$0, scratch_reg; jmp trampoline_handler
> 
> I believe you could do with mov %pc, scratch_reg; jmp ...
> 
> That has advantage of being able to share single physical
> page across multiple virtual pages...

A lot of architecture don't let you copy %pc that way so you would
have to use 'call' - but that trashes the return address cache.
It also needs the trampoline handler to know the addresses
of the trampolines.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.