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.
