From: Oleg Nesterov <oleg@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Larry Woodman <lwoodman@redhat.com>,
Michal Hocko <mhocko@suse.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 0/1] expand_downwards: don't require the gap if !vm_prev
Date: Thu, 29 Jun 2017 17:19:01 +0200 [thread overview]
Message-ID: <20170629151901.GA32134@redhat.com> (raw)
In-Reply-To: <CA+55aFz0bvToQBMn+5_1+_OFDd-yNm3Tkt1tFBojwDHXsrHSHQ@mail.gmail.com>
On 06/28, Linus Torvalds wrote:
>
> On Wed, Jun 28, 2017 at 10:52 AM, Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > Now that the stack-guard-page has gone, why do we need to allow to grow
> > into the previous VM_GROWSDOWN vma? IOW, why we can not simply remove
> > the VM_GROWSDOWN check in expand_downwards() ?
>
> Because the "prev" vma may actually be the original vma.
>
> I think I described it in an earlier thread, but what happened at
> least once was:
>
> - program has some part that uses a lot of stack for part of the
> execution for some temp buffer or deep recursion or whatever
>
> - somebody noticed this, and decided to free up the no-longer-used
> pages by doing a "munmap()" after the program was done with that part
> of the stack
>
> - but the "munmap()" wasn't complete (maybe it only accounted for the
> explicitly used buffer, whatever), so the munmap actually didn't just
> remove the no-longer used bottom of the stack, it actually split the
> stack segment into two (with a small remaining stack turd that was the
> *real* bottom of the deep stack that used to exist)
Ah, OK, thanks...
> As to your patch: I would prefer to actually keep the new failure
> behavior of unconditionally breaking a big stack expansion), unless
> there's an actual thing it breaks.
Hmm. May be you misread this patch? Or I misunderstood.
> In fact, I'd even be quite open to adding a kernel warning about badly
> behaved binaries that grow their stack by a big amount in one go.
Yes, but this is another story.
Currently expand_downwards(address) does
if (address < stack_guard_gap)
return -ENOMEM;
This has nothing to do with "by how much it needs to grow", this simply
forbids the bottom of stack below stack_guard_gap. Why?
I don't think this patch can make any difference in practice, it just
tries to make this logic more consistent/understandable.
For example. Suppose that stack_guard_gap = 1M (default). Now,
addr = 512K; // any addr <= stack_guard_gap;
char *stack = mmap(addr, MAP_FIXED|MAP_GROWSDOWN, PAGE_SIZE);
*stack = 0;
stack -= PAGE_SIZE;
*stack = 0;
The first store will always succeed, the 2nd one will always fail even
if (likely) there is no another vma below. This looks strange to me.
Oleg.
next prev parent reply other threads:[~2017-06-29 15:19 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-28 17:52 [PATCH 0/1] expand_downwards: don't require the gap if !vm_prev Oleg Nesterov
2017-06-28 17:52 ` [PATCH 1/1] " Oleg Nesterov
2017-06-30 13:16 ` Michal Hocko
2017-06-28 23:26 ` [PATCH 0/1] " Linus Torvalds
2017-06-29 15:19 ` Oleg Nesterov [this message]
2017-06-29 18:21 ` Linus Torvalds
2017-06-29 18:55 ` Oleg Nesterov
2017-06-29 19:00 ` Linus Torvalds
2017-06-30 13:24 ` Michal Hocko
2017-06-30 17:08 ` Linus Torvalds
2017-06-30 17:26 ` Michal Hocko
2017-06-30 17:48 ` Linus Torvalds
2017-07-03 15:49 ` Michal Hocko
2017-07-03 16:30 ` Linus Torvalds
2017-07-03 16:54 ` Michal Hocko
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=20170629151901.GA32134@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lwoodman@redhat.com \
--cc=mhocko@suse.com \
--cc=torvalds@linux-foundation.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox