lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Wed, 30 Mar 2011 11:33:21 -0400
From:	Andrew Lutomirski <luto@....edu>
To:	"H. Peter Anvin" <hpa@...nel.org>
Cc:	x86@...nel.org, Thomas Gleixner <tglx@...utronix.de>,
	Ingo Molnar <mingo@...e.hu>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] x86-64: Clean up vdso/kernel shared variables

On Wed, Mar 30, 2011 at 11:03 AM, H. Peter Anvin <hpa@...nel.org> wrote:
> On 03/29/2011 07:29 AM, Andy Lutomirski wrote:
>> Variables that are shared between the vdso and the kernel are
>> currently a bit of a mess.  They are each defined with their own
>> magic, they are accessed differently in the kernel, the vsyscall page,
>> and the vdso, and one of them (vsyscall_clock) doesn't even really
>> exist.
>>
>> This changes them all to use a common mechanism.  All of them are
>> delcared in vvar.h with a fixed address (validated by the linker
>> script).  In the kernel (as before), they look like ordinary
>> read-write variables.  In the vsyscall page and the vdso, they are
>> accessed through a new macro VVAR, which gives read-only access.
>>
>> The vdso is now loaded verbatim into memory without any fixups.  As a
>> side bonus, access from the vdso is faster because a level of
>> indirection is removed.
>>
>> Signed-off-by: Andy Lutomirski <luto@....edu>
>
> How does this deal with variables which really should be shared with
> multiple vdsos (in particular the 32-bit vdso and the 64-bit vdso)?
> Part of me is wondering if it might not be simpler to put them all into
> a structure?

Good question.  As far as I can tell, the 32-bit VDSO doesn't access
the vsyscall page at all.  I think it just has the magic needed to
invoke syscalls.  I don't know whether there even is a 32-bit
vgettimeofday, etc.

If we wanted to *add* that (for a huge performance increase on systems
with stable TSC), then there would need to be a 32-bit visible address
for the vsyscall page, and I don't know enough about the architecture
to do that without a bit of research.  Nor do I really feel inclined
to start messing with magic functions called compat_vread :)

I think a structure would be a little simpler, but similar magic would
be needed to find the think as we have now.  The down side is that
most of the kernel expects there to be a symbol called "jiffies".  So
we'd need more linker magic to make jiffies exist and point to the
right place in the structure.

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ