From: Michael Vogt <michael.v...@gmail.com> Hi,
This is v3 of the openat2 support in linux-user. Thanks again for the excellent second round of feedback from Richard Henderson. This version tries to be closer to the kernels behavior, i.e. now do_openat2() uses a new copy_struct_from_user() helper that is very similar to the kernels. This lead me to also drop incuding openat2.h (as was originally suggested in the v1 review). It now contains it as a copy named `struct open_how_ver0` and with that we can LOG_UNIMP if the struct ever grows and qemu-user needs updating. To answer the question why "maybe_do_fake_open()" uses a "use_returned_fd" bool instead of just returning "-1": I wanted to be as close as possible to the previous behavior and maybe_fake_open() could in theory return "-1" for failures in memfd_create() or mkstemp() or fake_open->fill(). In those cases the old code in do_guest_openat() failed and returned the error but the new code would just see a -1 and continue trying to open a special file that should have been faked. Maybe I did overthink this as it's very corner-case-y. Advise is welcome here, happy to change back or simplify in other ways. Thanks again, Michael v2 -> v3: - fix coding style (braches) - improve argument args/naming in do_openat2() - merge do_openat2/do_guest_openat2 - do size checks first in do_openat2 - add "copy_struct_from_user" and use in "do_openat2()" - drop using openat2.h and create "struct open_how_v0" - log if open_how guest struct is bigger than our supported struct v1 -> v2: - do not include <sys/syscall.h> - drop do_guest_openat2 from qemu.h and make static - drop "safe" from do_guest_openat2 - ensure maybe_do_fake_open() is correct about when the result should be used or not - Extract do_openat2() helper from do_syscall1() - Call user_unlock* if a lock call fails - Fix silly incorrect use of "target_open_how" when "open_how" is required - Fix coding style comments - Fix validation of arg4 in openat2 - Fix missing zero initialization of open_how - Define target_open_how with abi_* types - Warn about unimplemented size if "size" of openat2 is bigger than target_open_how Michael Vogt (1): linux-user: add openat2 support in linux-user linux-user/syscall.c | 116 ++++++++++++++++++++++++++++++++++++-- linux-user/syscall_defs.h | 7 +++ 2 files changed, 119 insertions(+), 4 deletions(-) -- 2.45.2