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 v2 2/2] fiber: exit with panic if we unable to revert guard page Date: Tue, 4 Feb 2020 18:47:42 +0300 [thread overview] Message-ID: <20200204154742.GA32754@atlas> (raw) In-Reply-To: <20200115170524.20471-3-gorcunov@gmail.com> * Cyrill Gorcunov <gorcunov@gmail.com> [20/01/15 20:07]: > At the moment we setup fiber's stack with a guard page > which is used to detect stack overrun. This page is just > a regular page taken from a slab with PROT_NONE attribute. > > Once fiber is no longer needed we try to revert this > attribute back to PROT_READ | PROT_WRITE. Still there > is a pretty small chance that this attempt get failed. > > Thus in such case we should not allow to proceed but rather > lets panic, otherwise the slab won't longer be solid r/w memory > area and attempt to write into this page will cause > an unpredictable exception. > > Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> > --- > src/lib/core/fiber.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c > index b51f46f2f..fdad7607c 100644 > --- a/src/lib/core/fiber.c > +++ b/src/lib/core/fiber.c > @@ -1041,13 +1041,17 @@ fiber_stack_destroy(struct fiber *fiber, struct slab_cache *slabc) > * to setup the original protection back in > * background. > * > + * For now lets exit with panic: if mprotect > + * failed we must not allow to reuse such slab > + * with PROT_NONE'ed page somewhere inside. > + * somewhere inside its stack area would be more clear. > * Note that in case if we're called from > * fiber_stack_create() the @mprotect_flags is > * the same as the slab been created with, so > * calling mprotect for VMA with same flags > * won't fail. > */ > - diag_log(); > + panic_syserror("fiber: Can't put guard page to slab"); While the patch itself is LGTM, we need to nail down the cause of the failure even at the cost of crash, I suspect what we're getting here is ENOMEM from the kernel. I suspect we have too many mprotect regions and the kernel runs out of some internal resources for them. I think adding better diagnostics could help us identify the issue: the failed address, its slab, the total number of fibers (and by induction mprotected pages). I have also discussed the issue with @xemul, and he suggests that wrong slab alignment could be causing this. Finally, we could try to clear mprotect() first, and if it fails, avoid destroying the fiber and keep it cached for a while more. We could retry destroying it when kernel has more memory. These are of course ideas for follow ups. -- Konstantin Osipov, Moscow, Russia
next prev parent reply other threads:[~2020-02-04 15:47 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-01-15 17:05 [Tarantool-patches] [PATCH v2 0/2] fiber: Handle stack madvise/mprotect errors Cyrill Gorcunov 2020-01-15 17:05 ` [Tarantool-patches] [PATCH v2 1/2] fiber: use diag_ logger in fiber_madvise/mprotect failures Cyrill Gorcunov 2020-02-03 21:56 ` Alexander Turenko 2020-02-03 22:05 ` Cyrill Gorcunov 2020-02-03 22:10 ` Alexander Turenko 2020-01-15 17:05 ` [Tarantool-patches] [PATCH v2 2/2] fiber: exit with panic if we unable to revert guard page Cyrill Gorcunov 2020-02-03 22:03 ` Alexander Turenko 2020-02-04 15:47 ` Konstantin Osipov [this message] 2020-02-04 16:08 ` 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=20200204154742.GA32754@atlas \ --to=kostja.osipov@gmail.com \ --cc=gorcunov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v2 2/2] fiber: exit with panic if we unable to revert guard page' \ /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