qemu-e2k/hw/9pfs
Christian Schoenebeck 951fe2f89f 9pfs: fix wrong errno being sent to Linux client on macOS host
Linux and macOS only share some errno definitions with equal macro
name and value. In fact most mappings for errno are completely
different on the two systems.

This patch converts some important errno values from macOS host to
corresponding Linux errno values before eventually sending such error
codes along with 'Rlerror' replies (if 9p2000.L is used that is). Not
having translated errnos before violated the 9p2000.L protocol spec,
which says:

  "
  size[4] Rlerror tag[2] ecode[4]

  ... ecode is a numerical Linux errno.
  "

  https://github.com/chaos/diod/wiki/protocol#lerror----return-error-code

This patch fixes a bunch of misbehaviours when running a Linux client
on macOS host. For instance this patch fixes:

  mount -t 9p -o posixacl ...

on Linux guest if security_mode=mapped was used for 9p server, which
refused to mount successfully, because macOS returned ENOATTR==93
when client tried to retrieve POSIX ACL xattrs, because errno 93
is defined as EPROTONOSUPPORT==93 on Linux, so Linux client believed
that xattrs were not supported by filesystem on host in general.

Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Link: https://lore.kernel.org/qemu-devel/20220421124835.3e664669@bahia/
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Message-Id: <b322ab298a62069e527d2b032028bdc9115afacd.1651228001.git.qemu_oss@crudebyte.com>
2022-05-01 14:07:03 +02:00
..
9p-local.c 9p: darwin: Implement compatibility for mknodat 2022-03-07 11:49:31 +01:00
9p-local.h
9p-posix-acl.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
9p-proxy.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
9p-proxy.h
9p-synth.c 9pfs: fix inode sequencing in 'synth' driver 2022-04-30 13:11:47 +02:00
9p-synth.h 9pfs: Fix segfault in do_readdir_many caused by struct dirent overread 2022-02-17 16:57:58 +01:00
9p-util-darwin.c 9pfs: fix qemu_mknodat(S_IFSOCK) on macOS 2022-05-01 14:02:08 +02:00
9p-util-linux.c 9p: darwin: Implement compatibility for mknodat 2022-03-07 11:49:31 +01:00
9p-util.h 9pfs: fix wrong errno being sent to Linux client on macOS host 2022-05-01 14:07:03 +02:00
9p-xattr-user.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
9p-xattr.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
9p-xattr.h
9p.c 9pfs: fix wrong errno being sent to Linux client on macOS host 2022-05-01 14:07:03 +02:00
9p.h 9p: move P9_XATTR_SIZE_MAX from 9p.h to 9p.c 2022-04-01 13:06:07 +02:00
codir.c 9pfs: Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
cofile.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
cofs.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
coth.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
coth.h 9pfs/coth.h: drop Doxygen format on v9fs_co_run_in_worker() 2022-03-07 11:49:31 +01:00
coxattr.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
Kconfig
meson.build 9p: darwin: *xattr_nofollow implementations 2022-03-07 11:49:31 +01:00
trace-events
trace.h
virtio-9p-device.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
virtio-9p.h
xen-9p-backend.c 9pfs: add link to 9p developer docs 2021-07-05 13:03:16 +02:00
xen-9pfs.h