qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Christian Schoenebeck <qemu_oss@crudebyte.com>
To: qemu-devel@nongnu.org
Cc: Will Cohen <wwcohen@gmail.com>, Greg Kurz <groug@kaod.org>,
	Michael Roitzsch <reactorcontrol@icloud.com>,
	Keno Fischer <keno@juliacomputing.com>,
	Akihiko Odaki <akihiko.odaki@gmail.com>,
	qemu-stable@nongnu.org
Subject: [PATCH 4/5] 9pfs: fix wrong errno being sent to Linux client on macOS host
Date: Tue, 19 Apr 2022 13:41:59 +0200	[thread overview]
Message-ID: <c32aafaa3f29424fc13ae86b369c9baf1ceb0ec6.1650370027.git.qemu_oss@crudebyte.com> (raw)
In-Reply-To: <cover.1650370026.git.qemu_oss@crudebyte.com>

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 Tlerror replies (if 9p2000.L is used that is), which
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>
---
 hw/9pfs/9p.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index d953035e1c..becc41cbfd 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -57,6 +57,31 @@ enum {
 
 P9ARRAY_DEFINE_TYPE(V9fsPath, v9fs_path_free);
 
+/* Translates errno from host -> Linux if needed */
+static int errno_to_dotl(int err) {
+#if defined(CONFIG_LINUX)
+    /* nothing to translate (Linux -> Linux) */
+#elif defined(CONFIG_DARWIN)
+    /* translation mandatory for macOS hosts */
+    if (err == ENAMETOOLONG) {
+        err = 36; /* ==ENAMETOOLONG on Linux */
+    } else if (err == ENOTEMPTY) {
+        err = 39; /* ==ENOTEMPTY on Linux */
+    } else if (err == ELOOP) {
+        err = 40; /* ==ELOOP on Linux */
+    } else if (err == ENOATTR) {
+        err = 61; /* ==ENODATA on Linux */
+    } else if (err == ENOTSUP) {
+        err = 95; /* ==EOPNOTSUPP on Linux */
+    } else if (err == EOPNOTSUPP) {
+        err = 95; /* ==EOPNOTSUPP on Linux */
+    }
+#else
+#error Missing errno translation to Linux for this host system
+#endif
+    return err;
+}
+
 static ssize_t pdu_marshal(V9fsPDU *pdu, size_t offset, const char *fmt, ...)
 {
     ssize_t ret;
@@ -1054,6 +1079,8 @@ static void coroutine_fn pdu_complete(V9fsPDU *pdu, ssize_t len)
             }
             len += ret;
             id = P9_RERROR;
+        } else {
+            err = errno_to_dotl(err);
         }
 
         ret = pdu_marshal(pdu, len, "d", err);
-- 
2.32.0 (Apple Git-132)



  parent reply	other threads:[~2022-04-19 12:34 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-19 12:07 [PATCH 0/5] 9pfs: macOS host fixes Christian Schoenebeck
2022-04-19 11:40 ` [PATCH 1/5] 9pfs: fix qemu_mknodat(S_IFREG) on macOS Christian Schoenebeck
2022-04-19 13:44   ` Will Cohen
2022-04-20  2:03   ` Akihiko Odaki
2022-04-20  8:40     ` Greg Kurz
2022-04-20  9:38       ` Christian Schoenebeck
2022-04-19 11:41 ` [PATCH 2/5] 9pfs: fix qemu_mknodat(S_IFSOCK) " Christian Schoenebeck
2022-04-19 13:46   ` Will Cohen
2022-04-20  9:09   ` Greg Kurz
2022-04-20 10:28     ` Christian Schoenebeck
2022-04-20 12:08       ` Greg Kurz
2022-04-20 12:10   ` Greg Kurz
2022-04-20 12:41     ` Christian Schoenebeck
2022-04-19 11:41 ` [PATCH 3/5] 9pfs: fix wrong encoding of rdev field in Rgetattr " Christian Schoenebeck
2022-04-21  7:30   ` Greg Kurz
2022-04-21 10:25     ` Christian Schoenebeck
2022-04-21 10:31       ` Greg Kurz
2022-04-19 11:41 ` Christian Schoenebeck [this message]
2022-04-21 10:48   ` [PATCH 4/5] 9pfs: fix wrong errno being sent to Linux client on macOS host Greg Kurz
2022-04-21 11:13     ` Christian Schoenebeck
2022-04-21 11:46       ` Greg Kurz
2022-04-21 12:20         ` Christian Schoenebeck
2022-04-19 11:43 ` [PATCH 5/5] 9pfs: fix removing non-existent POSIX ACL xattr " Christian Schoenebeck
2022-04-21  8:26   ` Greg Kurz
2022-04-21 10:55     ` Christian Schoenebeck
2022-04-21 12:26       ` Greg Kurz
2022-04-21 13:03         ` Christian Schoenebeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c32aafaa3f29424fc13ae86b369c9baf1ceb0ec6.1650370027.git.qemu_oss@crudebyte.com \
    --to=qemu_oss@crudebyte.com \
    --cc=akihiko.odaki@gmail.com \
    --cc=groug@kaod.org \
    --cc=keno@juliacomputing.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=reactorcontrol@icloud.com \
    --cc=wwcohen@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).