|
|
Message-ID: <20110815214651.GC20895@openwall.com>
Date: Tue, 16 Aug 2011 01:46:51 +0400
From: Solar Designer <solar@...nwall.com>
To: kernel-hardening@...ts.openwall.com
Subject: Re: 32/64 bitness restriction for pid namespace
Vasiliy,
On Mon, Aug 15, 2011 at 07:38:36PM +0400, Vasiliy Kulikov wrote:
> Note the strage output of -e32 lock64, -e64 lock32, lock64 -e lock32.
> There is a major problem with lock on exec (ptrace output):
>
> execve("./lock32", ["./lock32", "-e64", "./lock32"], [/* 17 vars */]) = 0
> ...
> prctl(0x23 /* PR_??? */, 0x1, 0x40, 0, 0) = 0
> execve("./lock32", ["./lock32"], [/* 28 vars */]) = -1 ENOEXEC (Exec format error)
> execve("/bin/sh", ["/bin/sh", "./lock32"], [/* 28 vars */]) = 0
> brk(0) = 0x2447000
> ...
>
> So, library function tries to run /bin/sh if no kernel interpreter is
> found. As the first execve(2) failed, the lock on exec is not forced
> anymore, but from the application point of view it is the only execve().
> For -e lock32 the expectation is not broken, but 32bit ELF is still tried to
> be passed to 64bit /bin/sh.
That's nasty.
> My point is still that we should keep the only flag - lock current
> process and implement simple re-exec of vzctl.
It's not so simple. It means, for example, that Owl built for x86_64
should also contain a version of vzctl built for i686 - but it normally
lacks development tools and libraries for that (we don't currently do
multilib within a single build of Owl).
> But other ways like workaround of multiple execve() calls are welcome.
Given your discovery, maybe we should have execve() return an error code
like -EPERM, such that the library would not try the shell?
Thanks,
Alexander
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.