target/arm/arm-semi: Make semihosting code hand out its own file descriptors
commit35e9a0a8ce4be12a86e5cedd1268ff22eeacdc9e
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 16 Sep 2019 14:15:33 +0000 (16 15:15 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 15 Oct 2019 17:09:03 +0000 (15 18:09 +0100)
tree31a2dad2e01cfd56283e260cf480a613c69bbc1e
parentf8ad2306d157a1db494dc0747f9f9afbae72cbda
target/arm/arm-semi: Make semihosting code hand out its own file descriptors

Currently the Arm semihosting code returns the guest file descriptors
(handles) which are simply the fd values from the host OS or the
remote gdbstub. Part of the semihosting 2.0 specification requires
that we implement special handling of opening a ":semihosting-features"
filename. Guest fds which result from opening the special file
won't correspond to host fds, so to ensure that we don't end up
with duplicate fds we need to have QEMU code control the allocation
of the fd values we give the guest.

Add in an abstraction layer which lets us allocate new guest FD
values, and translate from a guest FD value back to the host one.
This also fixes an odd hole where a semihosting guest could
use the semihosting API to read, write or close file descriptors
that it had never allocated but which were being used by QEMU itself.
(This isn't a security hole, because enabling semihosting permits
the guest to do arbitrary file access to the whole host filesystem,
and so should only be done if the guest is completely trusted.)

Currently the only kind of guest fd is one which maps to a
host fd, but in a following commit we will add one which maps
to the :semihosting-features magic data.

If the guest is migrated with an open semihosting file descriptor
then subsequent attempts to use the fd will all fail; this is
not a change from the previous situation (where the host fd
being used on the source end would not be re-opened on the
destination end).

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20190916141544.17540-5-peter.maydell@linaro.org
target/arm/arm-semi.c