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
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.
this happens in mrb_open, the offending code is this here in gem_init.c
mruby commit: 0109198