From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/5] arm64: use fixmap region for permanent FDT mapping
Date: Wed, 11 Mar 2015 11:56:10 +0000 [thread overview]
Message-ID: <20150311115610.GE4114@leverpostej> (raw)
In-Reply-To: <CAKv+Gu-=azueQfe29qhCGCe5f4dL9srOSdiAooUpsZHAgAWz0A@mail.gmail.com>
> >> static void __init setup_machine_fdt(phys_addr_t dt_phys)
> >> {
> >> - if (!dt_phys || !early_init_dt_scan(phys_to_virt(dt_phys))) {
> >> + void *dt_virt = NULL;
> >> +
> >> + if (dt_phys && (dt_phys & 7) == 0)
> >> + dt_virt = fixmap_remap_fdt(dt_phys);
> >> +
> >
> > It might be worth checking that dt_phys is sufficiently far from the end
> > of a 2MB boundary that we can read the totalsize field below. Trivially
> > that means 8 bytes below, the header is 40 bytes, and any real DTB will
> > be larger than that.
> >
>
> Y i kind of cheated by putting the alignment check first: this means
> the first 8 bytes will always be readable
Ah, good point. Given that it could possibly explode in the core DT
verification I guess it's not too big a deal either way.
> > It's a shame the arley DTB verification functions don't take a limit
> > parameter or we could prevent them from making potentially bad accesses.
> >
> >> + /*
> >> + * Before passing the dt_virt pointer to early_init_dt_scan(), we have
> >> + * to ensure that the FDT size as reported in the FDT itself does not
> >> + * exceed the 2 MB window we just mapped for it.
> >> + */
> >> + if (!dt_virt ||
> >> + fdt_check_header(dt_virt) != 0 ||
> >> + (dt_phys & (SZ_2M - 1)) + fdt_totalsize(dt_virt) > SZ_2M ||
> >> + !early_init_dt_scan(dt_virt)) {
> >> early_print("\n"
> >> "Error: invalid device tree blob at physical address 0x%p (virtual address 0x%p)\n"
> >> - "The dtb must be 8-byte aligned and passed in the first 512MB of memory\n"
> >> + "The dtb must be 8-byte aligned and must not cross a 2 MB alignment boundary\n"
> >> "\nPlease check your bootloader.\n",
> >> - dt_phys, phys_to_virt(dt_phys));
> >> + dt_phys, dt_virt);
> >
> > I'm surprised the toolchain doesn't scream about dt_phys being a
> > phys_addr_t rather than a pointer here, given that's alway been wrong. I
> > guess the early_print wrapper managed to hide that from us -- can we
> > nuke that and use pr_crit here?
> >
>
> Sure, why not. Nobody is going to be able to read it anyway, I
> suppose, unless you are dumping __log_buf from gdb
I was under the mistaken impression you could get ouptut if you'd
hardcoded earlycon=whatever with CNFIG_CMDLINE, but obviously that's not
the case given we won't have called parse_early_param() yet.
I'd like to nuke early_print regardless.
Thanks.
Mark.
next prev parent reply other threads:[~2015-03-11 11:56 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-03 11:03 [PATCH 0/5] arm64: update/clarify/relax Image and FDT placement rules Ard Biesheuvel
2015-03-03 11:03 ` [PATCH 1/5] of/fdt: allow FDT virtual address outside of linear direct mapping Ard Biesheuvel
2015-03-10 21:47 ` Rob Herring
2015-03-11 8:34 ` Ard Biesheuvel
2015-03-11 11:48 ` Ard Biesheuvel
2015-03-03 11:03 ` [PATCH 2/5] arm64: use fixmap region for permanent FDT mapping Ard Biesheuvel
2015-03-10 21:37 ` Rob Herring
2015-03-11 7:05 ` Ard Biesheuvel
2015-03-11 9:50 ` Mark Rutland
2015-03-11 10:20 ` Ard Biesheuvel
2015-03-11 10:46 ` Mark Rutland
2015-03-11 12:22 ` Rob Herring
2015-03-11 10:43 ` Mark Rutland
2015-03-11 10:54 ` Ard Biesheuvel
2015-03-11 11:56 ` Mark Rutland [this message]
2015-03-03 11:03 ` [PATCH 3/5] arm64: Documentation: clarify Image placement in physical RAM Ard Biesheuvel
2015-03-11 10:04 ` Mark Rutland
2015-03-03 11:03 ` [PATCH 4/5] arm64/efi: ensure that Image does not cross a 512 MB boundary Ard Biesheuvel
2015-03-11 11:50 ` Mark Rutland
2015-03-11 15:00 ` Ard Biesheuvel
2015-03-03 11:03 ` [PATCH 5/5] arm64/efi: adapt to relaxed FDT placement requirements Ard Biesheuvel
2015-03-11 12:09 ` Mark Rutland
2015-03-11 14:42 ` Ard Biesheuvel
2015-03-10 10:51 ` [PATCH 0/5] arm64: update/clarify/relax Image and FDT placement rules Ard Biesheuvel
2015-03-10 11:21 ` Mark Rutland
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=20150311115610.GE4114@leverpostej \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.