mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Abel Bernabeu" <abelbg@m2grp.com>
To: "Daniel Jacobowitz" <dan@debian.org>,
	akpm@linux-foundation.org, mm-commits@vger.kernel.org,
	abelbg@m2grp.com, hpa@zytor.com, jkosina@suse.cz,
	roland@redhat.com, schwab@suse.de, stable@kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: + elf-loader-crash-while-zero-filling-bss.patch added to -mm tree
Date: Thu, 14 Feb 2008 11:03:51 +0100	[thread overview]
Message-ID: <15577be70802140203r4f33e7ebg3c2fc8ebc2c428c@mail.gmail.com> (raw)
In-Reply-To: <20080213143701.GA21800@caradoc.them.org>

2008/2/13, Daniel Jacobowitz <dan@debian.org>:
> On Wed, Feb 13, 2008 at 12:15:06AM -0800, akpm@linux-foundation.org wrote:
>  > Subject: Elf loader crash while zero-filling .bss
>  > From: "Abel Bernabeu" <abelbg@m2grp.com>
>  >
>  > I've finally found a solution for the crash in load_binary_elf I
>  > reported last week:
>  >
>  > http://lkml.org/lkml/2008/1/30/171
>  >
>  > The attached patch solves my problem.
>  >
>  > set_brk(start, end) allocs just page aligned regions (by "collapsing" both
>  > extremes to the start of the page in which they lay)...  That means than
>  > even if both pointers are not equal there are still some chances that
>  > set_brk has allocated no space at all because ELF_PAGEALIGN(elf_bss) ==
>  > ELF_PAGEALIGN(elf_brk).
>  >
>  > So the condition was not correct.
>
>  This patch is wrong.
>
>  ELF_PAGEALIGN rounds up to the end of the page, not down to the start
>  of the page.  If elf_bss is in the middle of a page, set_brk allocates
>  any additional pages after the one already allocated.  elf_bss is the
>  start of the area that needs to be zero initialized, elf_brk is its
>  end.  So if elf_bss != elf_brk then there's garbage mapped in BSS
>  from the file and if you don't clear it some of your zero-initialized
>  variables won't be zero initialized at all.
>
>  In the linked message, set_brk is passed elf_bss so its actual
>  arguments are set_brk (0xa3801, 0x000a4ec8).  It should map one
>  page.  0xa3801 should be an already mapped page, and clear_user should
>  succeed in clearing it.

The bad news... Dan is rigth and I've made you loss your time because
of my initial missunderstanding of that piece of code.

Having your boss and the client continously asking if does Linux
already run on our board doesn't help to keep your mind clearness X)

The call to clear_user produced a page fault (it's true), but it was a
benign one (the some sort of page fault with permits load-on-demand of
the binary).

Then Rusell King's page fault handler
(arch/arm/mm/fault.c:do_DataAbort) manages to finally call the correct
non-architecture specific handler for load-on-demand.

This non-architecture specific handler allocs a physical page in which
clear_user can retry to write at a second try when the program
execution is restarted.

The "funny" thing is that now I am almost sure that I was playing with
Rusell's code and I accidentally left commented some of the code that
finally  calls this non architecture specific code.

The good news for "the community" is that now I am very sure I can
refactor the overpatched (but correct) portion of code I
missunderstood and send it back to you when is already tested. There
are some easy clean ups I can do in order to make Adrian Bunk happy :D

Yours, Abel.

      reply	other threads:[~2008-02-14 10:04 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200802130816.m1D8GSep015744@imap1.linux-foundation.org>
2008-02-13 14:37 ` Daniel Jacobowitz
2008-02-14 10:03   ` Abel Bernabeu [this message]

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=15577be70802140203r4f33e7ebg3c2fc8ebc2c428c@mail.gmail.com \
    --to=abelbg@m2grp.com \
    --cc=akpm@linux-foundation.org \
    --cc=dan@debian.org \
    --cc=hpa@zytor.com \
    --cc=jkosina@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=roland@redhat.com \
    --cc=schwab@suse.de \
    --cc=stable@kernel.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

all inboxes | Powered by JetHome®