…lue type 'function' for key 'error')"

Reviewed by: Sebastien Roy <sebastien....@delphix.com>
Reviewed by: Paul Dagnelie <p...@delphix.com>
Reviewed by: Don Brady <don.br...@delphix.com>

Ztest failed with the following crash.

::status

debugging core file of ztest (64-bit) from clone-dc-slave-280-bc7947b1.dcenter
file: /usr/bin/amd64/ztest
initial argv: /usr/bin/amd64/ztest
threading model: raw lwps
status: process terminated by SIGABRT (Abort), pid=2150 uid=1025 code=-1
panic message: failure for thread 0xfffffd7fff112a40, thread-id 1: unprotected 
error in call to Lua API (Invalid
value type 'function' for key 'error')

::stack

libc.so.1`_lwp_kill+0xa()
libc.so.1`_assfail+0x182(fffffd7fffdfe8d0, 0, 0)
libc.so.1`assfail+0x19(fffffd7fffdfe8d0, 0, 0)
libzpool.so.1`vpanic+0x3d(fffffd7ffaa58c20, fffffd7fffdfeb00)
0xfffffd7ffaa28146()
0xfffffd7ffaa0a109()
libzpool.so.1`luaD_throw+0x86(3011a48, 2)
0xfffffd7ffa9350d3()
0xfffffd7ffa93e3f1()
libzpool.so.1`zcp_lua_to_nvlist+0x33(3011a48, 1, 2686470, fffffd7ffaa2e2c3)
libzpool.so.1`zcp_convert_return_values+0xa4(3011a48, 2686470, 
fffffd7ffaa2e2c3, fffffd7fffdfedd0)
libzpool.so.1`zcp_pool_error+0x59(fffffd7fffdfedd0, 1e0f450)
libzpool.so.1`zcp_eval+0x6f8(1e0f450, fffffd7ffaa483f8, 1, 0, 6400000, 1d33b30)
libzpool.so.1`dsl_destroy_snapshots_nvl+0x12c(2786b60, 0, 484750)
libzpool.so.1`dsl_destroy_snapshot+0x4f(fffffd7fffdfef70, 0)
ztest_dsl_dataset_cleanup+0xea(fffffd7fffdff4c0, 1)
ztest_dataset_destroy+0x53(1)
ztest_run+0x59f(fffffd7fff0e0498)
main+0x7ff(1, fffffd7fffdffa88)
_start+0x6c()

The problem is that zcp_convert_return_values() assumes that there's exactly 
one value on the stack, but that
isn't always true. It ends up putting the wrong thing on the stack which is 
then consumed by zcp_convert_return
values, which either adds the wrong message to the nvlist, or blows up.

The fix is to make sure that callers of zcp_convert_return_values() clear the 
stack before pushing their error
message, and zcp_convert_return_values() should VERIFY that the stack is the 
expected size.

Upstream bug: DLPX-51467
You can view, comment on, or merge this pull request online at:

  https://github.com/openzfs/openzfs/pull/612

-- Commit Summary --

  * 9424 ztest failure: "unprotected error in call to Lua API (Invalid value 
type 'function' for key 'error')"

-- File Changes --

    M usr/src/uts/common/fs/zfs/zcp.c (9)

-- Patch Links --

https://github.com/openzfs/openzfs/pull/612.patch
https://github.com/openzfs/openzfs/pull/612.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/612

------------------------------------------
openzfs: openzfs-developer
Permalink: 
https://openzfs.topicbox.com/groups/developer/discussions/T610003babaa78ca5-Mf0f3da5bb1ce87b7bca8cfdb
Delivery options: https://openzfs.topicbox.com/groups

Reply via email to