On Sun, Oct 28, 2018 at 10:14 PM Waldek Kozaczuk <[email protected]>
wrote:

>
> BTW I have noticed that on my latest Ubuntu 18.10 distribution programs
> like 'ls' and 'grep' seems to be pies as well.
>
> file hello
> hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
> linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0,
> BuildID[sha1]=e9c4234db3592c18920f9e0eb2d49eecf0fa5e4c, not stripped
>
> file /bin/ls
> /bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
> dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux
> 3.2.0, BuildID[sha1]=bf40cb84e7815de09fa792a097061886933e56fa, stripped
>
>
PIE have a security benefit - being able to load them at a random address,
so have become fashionable.


> When I tried to run unmodified '/bin/ls' on OSv I got this error:
>
> /ls: failed looking up symbol __progname in other objects
>

This can probably be fixed relatively easily. Worth at least opening an
issue.


>
> [backtrace]
> 0x000000000034c26b <elf::object::symbol_other(unsigned int)+315>
> 0x000000000039f3e0 <elf::object::arch_relocate_rela(unsigned int, unsigned
> int, void*, long)+224>
> 0x000000000034a5e4 <elf::object::relocate_rela()+148>
> 0x000000000034d1d7 <elf::object::relocate()+199>
> 0x0000000000350adc
> <elf::program::load_object(std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,
> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > >,
> std::vector<std::shared_ptr<elf::object>,
> std::allocator<std::shared_ptr<elf::object> > >&)+1452>
> 0x0000000000351330
> <elf::program::get_library(std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,
> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > >, bool)+336>
> 0x000000000042b73b
> <osv::application::application(std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&,
> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > > const&, bool,
> std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,
> std::hash<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >,
> std::allocator<std::pair<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const,
> std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > > > > const*, std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&,
> std::function<0x000000000042bfbc
> <osv::application::run(std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&,
> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > > const&, bool,
> std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,
> std::hash<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >,
> std::allocator<std::pair<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const,
> std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > > > > const*, std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&, std::function<void
> ()>0x000000000042c22b
> <osv::application::run(std::vector<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,
> std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > > > const&)+91>
> 0x0000000000219e06 <do_main_thread(void*)+1942>
> 0x0000000000459fb5 <???+4562869>
> 0x00000000003f9186 <thread_main_c+38>
> 0x000000000039b172 <???+3780978>
>
> So I wonder how close OSv is to be able to run unmodified Linux
> executables like ls and grep as long as they are PIEs.
>

Indeed, we should be very close to doing that (and we're already compiling
as PIE for some of the apps.git examples) but there're a couple of
unfortunate issues left which aren't very easy to fix:

https://github.com/cloudius-systems/osv/issues/352
https://github.com/cloudius-systems/osv/issues/689

Without fixing those, we can run some PIEs, but not all of them.

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to