From: Konstantin Osipov <kostja.osipov@gmail.com> To: Cyrill Gorcunov <gorcunov@gmail.com> Cc: tml <tarantool-patches@dev.tarantool.org> Subject: Re: [Tarantool-patches] [PATCH 3/3] box/applier: fix nil dereference in applier rollback Date: Wed, 5 Feb 2020 01:04:30 +0300 [thread overview] Message-ID: <20200204220430.GB20146@atlas> (raw) In-Reply-To: <20200126223023.10197-4-gorcunov@gmail.com> * Cyrill Gorcunov <gorcunov@gmail.com> [20/01/27 10:14]: > Currently when transaction rollback happens we just drop an existing > error setting ClientError to the replicaset.applier.diag. This action > leaves current fiber with diag=nil, which in turn leads to sigsegv once > diag_raise() called right after applier_apply_tx(): > > | applier_f > | try { > | applier_subscribe > | applier_apply_tx > | // error happens > | txn_rollback > | diag_set(ClientError, ER_WAL_IO) > | diag_move(&fiber()->diag, &replicaset.applier.diag) > | // fiber->diag = nil > | applier_on_rollback > | diag_add_error(&applier->diag, diag_last_error(&replicaset.applier.diag) > | fiber_cancel(applier->reader); > | diag_raise() -> NULL dereference > | } catch { ... } Where exactly does the error happen in applier_apply_tx? Looks like this: > | diag_set(ClientError, ER_WAL_IO) > | diag_move(&fiber()->diag, &replicaset.applier.diag) overwrites the original error. Instead, the original error should be preserved and copied to the shared diagnostics area (replicaset.applier.error). -- Konstantin Osipov, Moscow, Russia
next prev parent reply other threads:[~2020-02-04 22:04 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-01-26 22:30 [Tarantool-patches] [PATCH 0/3] box/replication: add missing diag set and fix sigsegv Cyrill Gorcunov 2020-01-26 22:30 ` [Tarantool-patches] [PATCH 1/3] box/request: add missing OutOfMemory diag_set Cyrill Gorcunov 2020-01-26 22:30 ` [Tarantool-patches] [PATCH 2/3] box/applier: add missing diag_set on region_alloc failure Cyrill Gorcunov 2020-01-26 22:30 ` [Tarantool-patches] [PATCH 3/3] box/applier: fix nil dereference in applier rollback Cyrill Gorcunov 2020-02-04 22:04 ` Konstantin Osipov [this message] 2020-02-05 8:18 ` Cyrill Gorcunov 2020-02-05 9:50 ` Konstantin Osipov 2020-02-05 10:12 ` Cyrill Gorcunov 2020-02-05 10:45 ` Konstantin Osipov 2020-01-27 16:19 ` [Tarantool-patches] [PATCH 0/3] box/replication: add missing diag set and fix sigsegv Cyrill Gorcunov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200204220430.GB20146@atlas \ --to=kostja.osipov@gmail.com \ --cc=gorcunov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 3/3] box/applier: fix nil dereference in applier rollback' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox