At Bond, we use lua 5.3.5 inside an ESP32 for our RF device drivers. In recent firmware versions, we've experienced crashes at various places in the lua stack.
Taking one example, the `propagatemark` crash occurs because of the assert in the default case of the switch statement. Inspecting memory near the `o` object with JTAG does not show obvious heap corruption, but the value of `o->tt` is zero.
Taking another example, the `propagateall` crash is apparently occurring due to `g` being null and `g->grey` being thus a null pointer deref.
We recently did a major FW update on our product where we moved from ESP-IDF v3.3 to v5.1, and we switched from a homegrown coredump reporter to Memfault, but no changes were made to the lua code or our C bindings. Our homegrown system did not show crashes in the old FW, but Memfault is showing these lua crashes on the new code.
Does anyone here have some experience with crashes/assert fails of this nature, or have a suggestion how we may progress towards a root cause determination?
A few example crash backtraces follow.
Much Obliged,
Chris Merck
CTO - Bond Home (Olibra)
0 propagatemark in …/BondScript/lua/lgc.c at line 564
1 propagateall in …/BondScript/lua/lgc.c at line 604
2 atomic in …/BondScript/lua/lgc.c at line 1000
3 singlestep in …/BondScript/lua/lgc.c at line 1065
4 luaC_step in …/BondScript/lua/lgc.c at line 1137
5 lua_newuserdata in …/BondScript/lua/lapi.c at line 1190
6 newprefile in …/BondScript/lua/liolib.c at line 189
7 createstdfile in …/BondScript/lua/liolib.c at line 756
8 luaopen_io in …/BondScript/lua/liolib.c at line 771
9 luaD_precall in …/BondScript/lua/ldo.c at line 434
10 luaD_call in …/BondScript/lua/ldo.c at line 498
11 luaD_callnoyield in …/BondScript/lua/ldo.c at line 509
12 lua_callk in …/BondScript/lua/lapi.c at line 925
13 luaL_requiref in …/BondScript/lua/lauxlib.c at line 979
14 luaL_openlibs in …/BondScript/lua/linit.c at line 64
0 propagateall in …/BondScript/lua/lgc.c at line 604
1 atomic in …/BondScript/lua/lgc.c at line 1000
2 singlestep in …/BondScript/lua/lgc.c at line 1065
3 luaC_step in …/BondScript/lua/lgc.c at line 1137
4 lua_newuserdata in …/BondScript/lua/lapi.c at line 1190
5 newprefile in …/BondScript/lua/liolib.c at line 189
6 createstdfile in …/BondScript/lua/liolib.c at line 756
7 luaopen_io in …/BondScript/lua/liolib.c at line 771
8 luaD_precall in …/BondScript/lua/ldo.c at line 434
9 luaD_call in …/BondScript/lua/ldo.c at line 498
10 luaD_callnoyield in …/BondScript/lua/ldo.c at line 509
11 lua_callk in …/BondScript/lua/lapi.c at line 925
12 luaL_requiref in …/BondScript/lua/lauxlib.c at line 979
13 luaL_openlibs in …/BondScript/lua/linit.c at line 64
0 singlestep in …/BondScript/lua/lgc.c at line 1047
1 luaC_step in …/BondScript/lua/lgc.c at line 1137
2 lua_createtable in …/BondScript/lua/lapi.c at line 692
3 luaL_getsubtable in …/BondScript/lua/lauxlib.c at line 957
4 luaL_requiref in …/BondScript/lua/lauxlib.c at line 973
5 luaL_openlibs in …/BondScript/lua/linit.c at line 64
0 luaH_getshortstr in …/BondScript/lua/ltable.c at line 544
1 luaH_getstr in …/BondScript/lua/ltable.c at line 577
2 auxsetstr in …/BondScript/lua/lapi.c at line 747
3 lua_setfield in …/BondScript/lua/lapi.c at line 779
4 luaL_getsubtable in …/BondScript/lua/lauxlib.c at line 959
5 luaL_requiref in …/BondScript/lua/lauxlib.c at line 973
6 luaL_openlibs in …/BondScript/lua/linit.c at line 64
0 luaC_step in …/BondScript/lua/lgc.c at line 1139
1 lua_createtable in …/BondScript/lua/lapi.c at line 692
2 luaL_getsubtable in …/BondScript/lua/lauxlib.c at line 957
3 luaL_requiref in …/BondScript/lua/lauxlib.c at line 973
4 luaL_openlibs in …/BondScript/lua/linit.c at line 64