From 724df436166b80a1c172d7551d3405620038d79a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 4 Apr 2022 10:26:13 -0400 Subject: [PATCH] Fix trashing sandboxed directories We must not open the fd with O_PATH|O_NOFOLLOW, since the portal rejects that combination. Leaving out O_NOFOLLOW is fine in this case - we know it is a directory, we just received EISDIR. Fixes: #2629 --- gio/gtrashportal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gio/gtrashportal.c b/gio/gtrashportal.c index 03c933297..2f739600c 100644 --- a/gio/gtrashportal.c +++ b/gio/gtrashportal.c @@ -89,8 +89,12 @@ g_trash_portal_trash_file (GFile *file, fd = g_open (path, O_RDWR | O_CLOEXEC | O_NOFOLLOW); if (fd == -1 && errno == EISDIR) - /* If it is a directory, fall back to O_PATH */ - fd = g_open (path, O_PATH | O_CLOEXEC | O_RDONLY | O_NOFOLLOW); + /* If it is a directory, fall back to O_PATH. + * Remove O_NOFOLLOW since + * a) we know it is a directory, not a symlink, and + * b) the portal reject this combination + */ + fd = g_open (path, O_PATH | O_CLOEXEC | O_RDONLY); errsv = errno;