fake_id0: do not re-translate the chroot path #55
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The call to chroot "/" from UID 0 may fail with "No such file or directory". This call is invoked e.g. by pacman during the post-install.
The culprit is this commit, which added extra calls to translate_path and realpath. These are unnecessary because the function handling chroot, which is invoked from SYSCALL_EXIT_END, already receives the path translated (during the enter syscall, translate_sysarg() ultimately invokes translate_path() and stores it via set_sysarg_path()). The mentioned commit even tries to translate the path returned by get_root(tracee). It was trying to solve some issue which in the end was not solved, as the latest posts in that thread acknowledge.
The duplicated translation try may accidentally be harmless but may cause errors depending on the bindings configuration. I think that this may have not been reported until now because many distros choose to bind paths in /data, usually within the guest root filesystem. When that is not the case (e.g. a "pure" Linux root directory emulation) the substitute_binding() step during the translation fails and ruins the chroot.
I revert here to the original implementation (which of course already supported relative paths).