Hello,
when mruby compiles this file i get an error when running mrbtest, at least i believe this is causing the error since the offending code is using the symbols i created here.
class IO::Uring class << self attr_accessor :default_io_uring end module UringSocketBase def recv_nonblock raise NotImplementedError end def recvfrom raise NotImplementedError end end module ClientSocketMethods include UringSocketBase def connect(addrinfo, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_connect(self, addrinfo, sqe_flags, &block) end def send(buf, flags = 0, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_send(self, buf, flags, sqe_flags, &block) end def recv(maxlen = 0, flags = 0, &block) IO::Uring.default_io_uring.prep_recv(self, maxlen, flags, &block) end end module ServerSocketMethods include UringSocketBase def bind(addrinfo, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_bind(self, addrinfo, sqe_flags, &block) end def listen(backlog = SOMAXCONN, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_listen(self, backlog, sqe_flags, &block) end def accept(flags = 0, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_accept(self, flags, sqe_flags, &block) end def multishot_accept(flags = 0, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_multishot_accept(self, flags, sqe_flags, &block) end def sysaccept raise NotImplementedError end end module UDPSocketMethods include ClientSocketMethods def bind(addrinfo, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_bind(self, addrinfo, sqe_flags, &block) end end module UringFileMethods def read(nbytes = 0, offset = 0, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_read(self, nbytes, offset, sqe_flags, &block) end def read_fixed(offset = 0, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_read_fixed(self, offset, sqe_flags, &block) end def write(buf, offset = 0, sqe_flags = 0, &block) IO::Uring.default_io_uring.prep_write(self, buf, offset, sqe_flags, &block) end end class File < ::File def initialize(fd_or_path, mode = nil, perm = -1, resolve = nil, sqe_flags = 0, &block) if fd_or_path.kind_of? Integer super(fd_or_path, mode) else @path = fd_or_path open_how = OpenHow.new(mode, perm, resolve) IO::Uring.default_io_uring.prep_openat2(fd_or_path, nil, open_how, sqe_flags) do |op| raise op.errno if op.errno super(op.fileno, op.open_how.flags) block.call(self) if block end end end include UringFileMethods end class TCPSocket < ::TCPSocket include ClientSocketMethods end class UNIXSocket < ::UNIXSocket include ClientSocketMethods end class TCPServer < ::TCPServer include ServerSocketMethods end class UNIXServer < ::UNIXServer include ServerSocketMethods end class UDPSocket < ::UDPSocket include UDPSocketMethods end class Socket < ::Socket include UringSocketBase include ClientSocketMethods include ServerSocketMethods end end
================================================================= ==49487==ERROR: AddressSanitizer: global-buffer-overflow on address 0x5556125d175e at pc 0x5556121530c4 bp 0x7fffe9cfb7b0 sp 0x7fffe9cfb7c8 READ of size 1 at 0x5556125d175e thread T0 #0 0x5556121530c0 in mrb_vm_exec /home/hendrik/code/totally-normal-keyboard/mruby/src/vm.c:1694 #1 0x5556121a39b4 in mrb_vm_run /home/hendrik/code/totally-normal-keyboard/mruby/src/vm.c:1587 #2 0x5556121ab63c in mrb_top_run /home/hendrik/code/totally-normal-keyboard/mruby/src/vm.c:3399 #3 0x555612366ea8 in mrb_load_proc /home/hendrik/code/totally-normal-keyboard/mruby/src/load.c:714 #4 0x5556123aeeb8 in GENERATED_TMP_mrb_mruby_io_uring_gem_init /home/hendrik/code/totally-normal-keyboard/mruby/build/debug/mrbgems/mruby-io-uring/gem_init.c:1014 #5 0x555612313874 in mrb_init_mrbgems /home/hendrik/code/totally-normal-keyboard/mruby/build/debug/mrbgems/gem_init.c:201 #6 0x555612118e70 in init_mrbgems /home/hendrik/code/totally-normal-keyboard/mruby/src/state.c:67 #7 0x5556120e3dd8 in mrb_core_init_protect /home/hendrik/code/totally-normal-keyboard/mruby/src/error.c:741 #8 0x55561211a334 in mrb_open /home/hendrik/code/totally-normal-keyboard/mruby/src/state.c:82 #9 0x5556120afe00 in main /home/hendrik/code/totally-normal-keyboard/tools/tnk/tnk.c:624 #10 0x7fffb8b72298 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 #11 0x7fffb8b72378 in __libc_start_main_impl ../csu/libc-start.c:360 #12 0x5556120a872c in _start (/usr/local/sbin/tnk-debug+0x66872c) (BuildId: 7e3f094b0ec9347e239b74eeae458601e5fee9a4) 0x5556125d175e is located 34 bytes before global variable 'gem_mrblib_mruby_io_uring_proc_syms_1' defined in '/home/hendrik/code/totally-normal-keyboard/mruby/build/debug/mrbgems/mruby-io-uring/gem_init.c:611:1' (0x5556125d1780) of size 48 0x5556125d175e is located 0 bytes after global variable 'gem_mrblib_mruby_io_uring_proc_iseq_1' defined in '/home/hendrik/code/totally-normal-keyboard/mruby/build/debug/mrbgems/mruby-io-uring/gem_init.c:612:23' (0x5556125d16e0) of size 126 SUMMARY: AddressSanitizer: global-buffer-overflow /home/hendrik/code/totally-normal-keyboard/mruby/src/vm.c:1694 in mrb_vm_exec Shadow bytes around the buggy address: 0x5556125d1480: f9 f9 f9 f9 00 00 f9 f9 f9 f9 f9 f9 05 f9 f9 f9 0x5556125d1500: f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9 00 00 07 f9 0x5556125d1580: f9 f9 f9 f9 00 00 f9 f9 f9 f9 f9 f9 03 f9 f9 f9 0x5556125d1600: f9 f9 f9 f9 00 07 f9 f9 f9 f9 f9 f9 00 00 f9 f9 0x5556125d1680: f9 f9 f9 f9 00 00 00 03 f9 f9 f9 f9 00 00 00 00 =>0x5556125d1700: 00 00 00 00 00 00 00 00 00 00 00[06]f9 f9 f9 f9 0x5556125d1780: 00 00 00 00 00 00 f9 f9 f9 f9 f9 f9 07 f9 f9 f9 0x5556125d1800: f9 f9 f9 f9 00 00 07 f9 f9 f9 f9 f9 00 00 f9 f9 0x5556125d1880: f9 f9 f9 f9 03 f9 f9 f9 f9 f9 f9 f9 00 01 f9 f9 0x5556125d1900: f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9 03 f9 f9 f9 0x5556125d1980: f9 f9 f9 f9 00 01 f9 f9 f9 f9 f9 f9 00 f9 f9 f9 Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb ==49487==ABORTING
this happens in mrb_open, the offending code is this here in gem_init.c
mrb_DEFINE_SYMS_VAR(gem_mrblib_mruby_io_uring_proc_syms_1, 12, (MRB_SYM(UringSocketBase), MRB_SYM(ClientSocketMethods), MRB_SYM(ServerSocketMethods), MRB_SYM(UDPSocketMethods), MRB_SYM(UringFileMethods), MRB_SYM(File), MRB_SYM(TCPSocket), MRB_SYM(UNIXSocket), MRB_SYM(TCPServer), MRB_SYM(UNIXServer), MRB_SYM(UDPSocket), MRB_SYM(Socket), ), const); static const mrb_code gem_mrblib_mruby_io_uring_proc_iseq_1[126] = {
mruby commit: 0109198