diff options
author | Bernd Schubert <bschubert@ddn.com> | 2025-04-16 00:24:42 +0200 |
---|---|---|
committer | Bernd Schubert <bernd@bsbernd.com> | 2025-04-16 16:14:58 +0200 |
commit | 08ac8aee19938ce86d45c5776c013bc4d9303750 (patch) | |
tree | 4ae0d369d7238dec38493e0f7bdf10fcdd709d95 /lib | |
parent | db59dd41ab4ed2ca89dae32aa6f106f82bb1056e (diff) | |
download | libfuse-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')
-rw-r--r-- | lib/fuse_i.h | 3 |
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; } |