You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It looks like the Reader/Writer lock isn't thread safe. I haven't investigated the issue further, as there's been no previously raised issues for this in metasploit-framework.
Simple resource script which reads/writes to a file on disk:
<ruby>
# results.txt will be used as an instance counter# It will be incremented by 1 within a writer lock, and read via reader lockFile.write('./results.txt','0',mode: 'w')lock= ::Rex::ReadWriteLock.newbeginthreads=100.times.mapdoThread.newdo300.timesdoifrand > 0.5lock.synchronize_writedovalue=File.read('./results.txt').to_iFile.write('./results.txt',value + 1,mode: 'w')endendlock.synchronize_readdovalue=File.read('./results.txt')endendendendthreads.each(&:join)ensureputs"File result: #{File.read('./results.txt')}"end
</ruby>
Exception:
msf6 exploit(multi/script/web_delivery) > resource resource.rc
[*] Processing /Users/user/Documents/code/metasploit-framework/resource.rc for ERB directives.
[*] resource (/Users/user/Documents/code/metasploit-framework/resource.rc)> Ruby Code (791 bytes)
File result:
[-] resource (/Users/user/Documents/code/metasploit-framework/resource.rc)> Ruby Error: ThreadError Attempt to unlock a mutex which is not locked [
"/Users/user/.rvm/gems/ruby-3.0.2@metasploit-framework/gems/rex-core-0.1.26/lib/rex/sync/read_write_lock.rb:107:in `unlock'",
"/Users/user/.rvm/gems/ruby-3.0.2@metasploit-framework/gems/rex-core-0.1.26/lib/rex/sync/read_write_lock.rb:107:in `ensure in unlock_read'",
"/Users/user/.rvm/gems/ruby-3.0.2@metasploit-framework/gems/rex-core-0.1.26/lib/rex/sync/read_write_lock.rb:107:in `unlock_read'",
"/Users/user/.rvm/gems/ruby-3.0.2@metasploit-framework/gems/rex-core-0.1.26/lib/rex/sync/read_write_lock.rb:152:in `synchronize_read'",
"(eval):18:in `block (3 levels) in load_resource'",
"(eval):10:in `times'", "(eval):10:in `block (2 levels) in load_resource'",
"/Users/user/.rvm/gems/ruby-3.0.2@metasploit-framework/gems/logging-2.3.0/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'"
]
The text was updated successfully, but these errors were encountered:
Yike, i think i've seen this before... when i was trying to get MSF ported over to Rubinius many moons ago. That branch is a nightmare of Actors and Celluloid attempts, but i think i actually did something about this (gonna try to see what it was and if it was remotely sane).
It looks like the Reader/Writer lock isn't thread safe. I haven't investigated the issue further, as there's been no previously raised issues for this in metasploit-framework.
Simple resource script which reads/writes to a file on disk:
Exception:
The text was updated successfully, but these errors were encountered: