aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fuse_i.h
diff options
context:
space:
mode:
authorBernd Schubert <bschubert@ddn.com>2025-04-16 00:24:42 +0200
committerBernd Schubert <bernd@bsbernd.com>2025-04-16 16:14:58 +0200
commit08ac8aee19938ce86d45c5776c013bc4d9303750 (patch)
tree4ae0d369d7238dec38493e0f7bdf10fcdd709d95 /lib/fuse_i.h
parentdb59dd41ab4ed2ca89dae32aa6f106f82bb1056e (diff)
downloadlibfuse-08ac8aee19938ce86d45c5776c013bc4d9303750.tar.gz
conn: prevent duplicate flag conversion in high-level interface
The high-level interface triggers flag conversion twice: once in the high-level init and once in the low-level init. This caused false "both 'want' and 'want_ext' are set" errors when using fuse_set_feature_flag() or fuse_unset_feature_flag(). The existing check for duplicate conversion only worked when 32-bit flags were set directly. When using the preferred flag manipulation functions, conn->want and the lower 32 bits of conn->want_ext would differ, triggering the error. Fix this by synchronizing conn->want with the lower 32 bits of conn->want_ext after conversion, ensuring consistent state for subsequent calls. Closes: https://github.com/libfuse/libfuse/issues/1171 Signed-off-by: Bernd Schubert <bschubert@ddn.com>
Diffstat (limited to 'lib/fuse_i.h')
-rw-r--r--lib/fuse_i.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/fuse_i.h b/lib/fuse_i.h
index 23fcaa6..48b8294 100644
--- a/lib/fuse_i.h
+++ b/lib/fuse_i.h
@@ -256,5 +256,8 @@ static inline int convert_to_conn_want_ext(struct fuse_conn_info *conn,
conn->want;
}
+ /* ensure there won't be a second conversion */
+ conn->want = fuse_lower_32_bits(conn->want_ext);
+
return 0;
}