[GH-ISSUE #2159] ThreadSanitizer detects a race on has_mp_stat #1099

Closed
opened 2026-03-04 01:51:22 +03:00 by kerem · 1 comment
Owner

Originally created by @gaul on GitHub (May 13, 2023).
Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/2159

Could we probe this once during mount instead of in threaded code? Otherwise we can protect it with a lock:

WARNING: ThreadSanitizer: data race (pid=28727)
  Write of size 1 at 0x000001a5ae65 by thread T8:
    #0 get_object_attribute(char const*, stat*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>*, bool, bool*, bool) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:524:25 (s3fs+0x5391f6) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #1 check_object_access(char const*, int, stat*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:627:23 (s3fs+0x550174) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #2 s3fs_opendir(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2992:23 (s3fs+0x54ac55) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #3 fuse_fs_opendir <null> (libfuse.so.2+0xd5ab) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b)

  Previous write of size 1 at 0x000001a5ae65 by thread T6:
    #0 get_object_attribute(char const*, stat*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>*, bool, bool*, bool) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:524:25 (s3fs+0x5391f6) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #1 check_object_access(char const*, int, stat*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:627:23 (s3fs+0x550174) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #2 s3fs_access(char const*, int) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:4208:18 (s3fs+0x54b687) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #3 <null> <null> (libfuse.so.2+0x12476) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b)

  Location is global 'has_mp_stat' of size 1 at 0x000001a5ae65 (s3fs+0x1a5ae65)

  Thread T8 (tid=28745, running) created by thread T7 at:
    #0 pthread_create <null> (s3fs+0x4ae97f) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #1 <null> <null> (libfuse.so.2+0xc4e0) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b)

  Thread T6 (tid=28736, running) created by main thread at:
    #0 pthread_create <null> (s3fs+0x4ae97f) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4)
    #1 <null> <null> (libfuse.so.2+0xc4e0) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b)
    #2 __libc_start_call_main <null> (libc.so.6+0x27b49) (BuildId: 245240a31888ad5c11bbc55b18e02d87388f59a9)

SUMMARY: ThreadSanitizer: data race /home/gaul/work/s3fs-fuse/src/s3fs.cpp:524:25 in get_object_attribute(char const*, stat*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>*, bool, bool*, bool)
Originally created by @gaul on GitHub (May 13, 2023). Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/2159 Could we probe this once during mount instead of in threaded code? Otherwise we can protect it with a lock: ``` WARNING: ThreadSanitizer: data race (pid=28727) Write of size 1 at 0x000001a5ae65 by thread T8: #0 get_object_attribute(char const*, stat*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>*, bool, bool*, bool) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:524:25 (s3fs+0x5391f6) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #1 check_object_access(char const*, int, stat*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:627:23 (s3fs+0x550174) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #2 s3fs_opendir(char const*, fuse_file_info*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:2992:23 (s3fs+0x54ac55) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #3 fuse_fs_opendir <null> (libfuse.so.2+0xd5ab) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b) Previous write of size 1 at 0x000001a5ae65 by thread T6: #0 get_object_attribute(char const*, stat*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>*, bool, bool*, bool) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:524:25 (s3fs+0x5391f6) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #1 check_object_access(char const*, int, stat*) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:627:23 (s3fs+0x550174) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #2 s3fs_access(char const*, int) /home/gaul/work/s3fs-fuse/src/s3fs.cpp:4208:18 (s3fs+0x54b687) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #3 <null> <null> (libfuse.so.2+0x12476) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b) Location is global 'has_mp_stat' of size 1 at 0x000001a5ae65 (s3fs+0x1a5ae65) Thread T8 (tid=28745, running) created by thread T7 at: #0 pthread_create <null> (s3fs+0x4ae97f) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #1 <null> <null> (libfuse.so.2+0xc4e0) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b) Thread T6 (tid=28736, running) created by main thread at: #0 pthread_create <null> (s3fs+0x4ae97f) (BuildId: 6cab2bf3ee706ae3db5e6a0c59bbfa8e5a2327d4) #1 <null> <null> (libfuse.so.2+0xc4e0) (BuildId: 4db3553f25db655fdcad5600bb328da5dc18736b) #2 __libc_start_call_main <null> (libc.so.6+0x27b49) (BuildId: 245240a31888ad5c11bbc55b18e02d87388f59a9) SUMMARY: ThreadSanitizer: data race /home/gaul/work/s3fs-fuse/src/s3fs.cpp:524:25 in get_object_attribute(char const*, stat*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, header_nocase_cmp, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>*, bool, bool*, bool) ```
kerem closed this issue 2026-03-04 01:51:22 +03:00
Author
Owner

@ggtakec commented on GitHub (May 13, 2023):

@gaul I created PR #2161 to solve this.

<!-- gh-comment-id:1546721826 --> @ggtakec commented on GitHub (May 13, 2023): @gaul I created PR #2161 to solve this.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/s3fs-fuse#1099
No description provided.