Description

We are having several customers with crashes during calls to RPC permissions.trustedReload even after introducing the basic safety for concurrent RPC reload c87f520

Possible solution

It seems that we need to implement locking in order to be sure the memory is not gone in the middle of a read.

Reproduction

It's quite difficult to reproduce since match_hash_table call has to happen during a RPC reload

Debugging Data

(gdb) bt full
#0  match_hash_table (table=<optimized out>, msg=msg@entry=0x7fc3d800a808, src_ip_c_str=src_ip_c_str@entry=0x7fc3d7f217b8 "A.A.A.A", proto=proto@entry=1,
    from_uri=from_uri@entry=0x7fc3d7f1b750 "sip:fake@B.B.B.B") at hash.c:280
        __func__ = "match_hash_table"
        ruri = <optimized out>
        ruri_string = "sip:41584006001@B.B.B.B:5060\000\264{\224\377\177\000\000\000\240\200\331\302\177\000\000\300\000\000\000\000\000\000\000\332\003\000\000\000\000\000\000\300\067~\372PV\000\000\000\220
\324m,\233߁\260\341D\334\302\177\000\000\260go\372PV\000\000P\343!\332\302\177\000\000\004\340{\372PV\000\000`;~\372PV\000\000\300\067~\372PV\000\000@\024\000\000\000\000\000\000`\342!\332\302\177\000\000\001\00
0\000\000\000\000\000\000\310\066\204\331\302\177\000\000\000\240\200\331\302\177\000\000\300\000\000\000\000\000\000\000\300\067~\372PV\000\000`;~\372PV\000\000\332\003\000\000\000\000\000\000\000"...
        preg = {__buffer = 0x0, __allocated = 0, __used = 224, __syntax = 16843462, __fastmap = 0x0, __translate = 0x0, re_nsub = 0, __can_be_null = 0, __regs_allocated = 0, __fastmap_accurate = 1,
          __no_sub = 1, __not_bol = 0, __not_eol = 0, __newline_anchor = 0}
        np = 0x455449564e492035
        src_ip = {s = 0x7fc3d7f217b8 "A.A.A.A", len = <optimized out>}
        val = <optimized out>
        count = 0
#1  0x00007fc3d2362765 in allow_trusted (msg=msg@entry=0x7fc3d800a808, src_ip=0x7fc3d7f217b8 "A.A.A.A", proto=proto@entry=1, from_uri=from_uri@entry=0x7fc3d7f1b750 "sip:fake@B.B.B.B")
    at trusted.c:499
        __func__ = "allow_trusted"
        result = <optimized out>
        res = 0x0
        keys = {0x7fc3d7f1b750}
        vals = {{type = 3595139888, nul = 32707, free = -671045624, val = {int_val = -1803829520, ll_val = 140735684525808, double_val = 6.9532666868153257e-310, time_val = 140735684525808,
              string_val = 0x7fff947bbef0 "\001", str_val = {s = 0x7fff947bbef0 "\001", len = -94468017}, blob_val = {s = 0x7fff947bbef0 "\001", len = -94468017}, bitmap_val = 2491137776,
              uint_val = 2491137776, ull_val = 140735684525808}}}
        cols = {0x0, 0x5650fa650c25 <pv_printf+229>, 0x7fff947bb670, 0x0}
#2  0x00007fc3d2363ef3 in allow_trusted_furi (_msg=_msg@entry=0x7fc3d800a808, _src_ip_sp=_src_ip_sp@entry=0x7fc3d6494340 "xEI\326\303\177", _proto_sp=_proto_sp@entry=0x7fc3d64925e0 "\330\375H\326\303\177",
    from_uri=0x7fc3d7f1b750 "sip:fake@B.B.B.B") at trusted.c:590
        src_ip = {s = 0x7fc3d7f217b8 "A.A.A.A", len = 11}
        proto = {s = 0x7fc3d7f27820 "udp", len = 3}
        proto_int = 1
        __func__ = "allow_trusted_furi"
#3  0x00007fc3d23647d0 in allow_trusted_3 (_msg=0x7fc3d800a808, _src_ip_sp=0x7fc3d6494340 "xEI\326\303\177", _proto_sp=0x7fc3d64925e0 "\330\375H\326\303\177", _from_uri=<optimized out>) at trusted.c:634
        from_uri = {s = 0x7fc3d7f1b750 "sip:fake@B.B.B.B", len = 34}
        __func__ = "allow_trusted_3"
#4  0x00005650fa513319 in do_action (h=h@entry=0x7fff947bbef0, a=a@entry=0x7fc3d6497b30, msg=msg@entry=0x7fc3d800a808) at core/action.c:1085


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.