From: Mike Frysinger <vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
Subject: [PATCH 06/10] fdtdump: add a --scan option
Date: Mon, 15 Apr 2013 22:13:13 -0400 [thread overview]
Message-ID: <1366078397-14889-7-git-send-email-vapier@gentoo.org> (raw)
In-Reply-To: <1366078397-14889-1-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
Often times, fdts get embedded in other larger files. Rather than force
people to `dd` the blob out themselves, make the fdtdump file smarter.
It can now scan the blob looking for the fdt magic. Once locate, it does
a little validation on the main struct to make sure we didn't hit random
binary data.
Signed-off-by: Mike Frysinger <vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
---
fdtdump.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 44 insertions(+), 2 deletions(-)
diff --git a/fdtdump.c b/fdtdump.c
index a6e522c..c8a3ee7 100644
--- a/fdtdump.c
+++ b/fdtdump.c
@@ -2,12 +2,14 @@
* fdtdump.c - Contributed by Pantelis Antoniou <pantelis.antoniou AT gmail.com>
*/
+#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <libfdt.h>
#include <libfdt_env.h>
#include <fdt.h>
@@ -119,11 +121,13 @@ static void dump_blob(void *blob)
/* Usage related data. */
static const char usage_synopsis[] = "fdtdump [options] <file>";
-static const char usage_short_opts[] = USAGE_COMMON_SHORT_OPTS;
+static const char usage_short_opts[] = "s" USAGE_COMMON_SHORT_OPTS;
static struct option const usage_long_opts[] = {
+ {"scan", no_argument, NULL, 's'},
USAGE_COMMON_LONG_OPTS
};
static const char * const usage_opts_help[] = {
+ "Scan for an embedded fdt in file",
USAGE_COMMON_OPTS_HELP
};
@@ -132,20 +136,58 @@ int main(int argc, char *argv[])
int opt;
const char *file;
char *buf;
+ bool scan = false;
+ off_t len;
while ((opt = util_getopt_long()) != EOF) {
switch (opt) {
case_USAGE_COMMON_FLAGS
+
+ case 's':
+ scan = true;
+ break;
}
}
if (optind != argc - 1)
long_usage("missing input filename");
file = argv[optind];
- buf = utilfdt_read(file);
+ buf = utilfdt_read_len(file, &len);
if (!buf)
die("could not read: %s\n", file);
+ /* try and locate an embedded fdt in a bigger blob */
+ if (scan) {
+ unsigned char smagic[4];
+ char *p = buf;
+ char *endp = buf + len;
+
+ fdt_set_magic(smagic, FDT_MAGIC);
+
+ /* poor man's memmem */
+ while (true) {
+ p = memchr(p, smagic[0], endp - p - 4);
+ if (!p)
+ break;
+ if (fdt_magic(p) == FDT_MAGIC) {
+ /* try and validate the main struct */
+ off_t this_len = endp - p;
+ fdt32_t max_version = 17;
+ if (fdt_version(p) <= max_version &&
+ fdt_last_comp_version(p) < max_version &&
+ fdt_totalsize(p) < this_len &&
+ fdt_off_dt_struct(p) < this_len &&
+ fdt_off_dt_strings(p) < this_len)
+ break;
+ }
+ ++p;
+ }
+ if (!p)
+ die("%s: could not locate fdt magic\n", file);
+ printf("%s: found fdt at offset %#zx\n", file, p - buf);
+ buf = p;
+ }
+
dump_blob(buf);
return 0;
--
1.8.1.2
next prev parent reply other threads:[~2013-04-16 2:13 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-16 2:13 [PATCH 00/10 v3] usage()/--help clean up & unification, and extend fdtdump Mike Frysinger
[not found] ` <1366078397-14889-1-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-16 2:13 ` [PATCH 01/10] utilfdt_read_err: use xmalloc funcs Mike Frysinger
2013-04-16 2:13 ` [PATCH 02/10] utilfdt_read: pass back up the length of data read Mike Frysinger
[not found] ` <1366078397-14889-3-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-19 0:49 ` David Gibson
2013-04-16 2:13 ` [PATCH 03/10] die: constify format string arg Mike Frysinger
2013-04-16 2:13 ` [PATCH 04/10] util_version: new helper for displaying version info Mike Frysinger
[not found] ` <1366078397-14889-5-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-19 0:50 ` David Gibson
[not found] ` <20130419005046.GL16400-W9XWwYn+TF0XU02nzanrWNbf9cGiqdzd@public.gmane.org>
2013-04-21 19:26 ` Jon Loeliger
[not found] ` <E1UTztj-0006SA-F8-CYoMK+44s/E@public.gmane.org>
2013-04-22 0:25 ` Mike Frysinger
[not found] ` <201304212025.47665.vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-22 15:37 ` Jon Loeliger
[not found] ` <E1UUIno-0004Ox-Dd-CYoMK+44s/E@public.gmane.org>
2013-04-22 15:54 ` Mike Frysinger
[not found] ` <201304221154.08100.vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-22 20:44 ` Jon Loeliger
[not found] ` <E1UUNba-0005oJ-Ur-CYoMK+44s/E@public.gmane.org>
2013-04-22 21:16 ` Mike Frysinger
2013-04-22 21:19 ` Mike Frysinger
[not found] ` <201304221719.42982.vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-29 10:55 ` David Gibson
2013-04-16 2:13 ` [PATCH 05/10] fdtdump: make usage a bit more friendly Mike Frysinger
[not found] ` <1366078397-14889-6-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-30 8:12 ` David Gibson
[not found] ` <20130430081219.GF20202-W9XWwYn+TF0XU02nzanrWNbf9cGiqdzd@public.gmane.org>
2013-05-13 1:45 ` David Gibson
2013-04-16 2:13 ` Mike Frysinger [this message]
[not found] ` <1366078397-14889-7-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-30 8:12 ` [PATCH 06/10] fdtdump: add a --scan option David Gibson
2013-04-16 2:13 ` [PATCH 07/10] dtc/fdt{get, put}/convert-dtsv0-lexer: convert to new usage helpers Mike Frysinger
[not found] ` <1366078397-14889-8-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-30 8:23 ` David Gibson
2013-04-16 2:13 ` [PATCH 08/10] util: drop "long" from " Mike Frysinger
[not found] ` <1366078397-14889-9-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-30 8:12 ` David Gibson
2013-04-16 2:13 ` [PATCH 09/10] util: add common ARRAY_SIZE define Mike Frysinger
[not found] ` <1366078397-14889-10-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-29 10:51 ` David Gibson
2013-04-16 2:13 ` [PATCH 10/10] fdtdump: add a debug mode Mike Frysinger
[not found] ` <1366078397-14889-11-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-30 8:13 ` David Gibson
-- strict thread matches above, loose matches on Subject: below --
2013-04-10 18:29 [PATCH 00/10 v2] usage()/--help clean up & unification Mike Frysinger
[not found] ` <1365618555-5893-1-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-10 18:29 ` [PATCH 06/10] fdtdump: add a --scan option Mike Frysinger
[not found] ` <1365618555-5893-7-git-send-email-vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-11 4:11 ` David Gibson
[not found] ` <20130411041130.GB8165-W9XWwYn+TF0XU02nzanrWNbf9cGiqdzd@public.gmane.org>
2013-04-11 22:44 ` Mike Frysinger
[not found] ` <201304111844.21667.vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>
2013-04-15 5:02 ` David Gibson
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=1366078397-14889-7-git-send-email-vapier@gentoo.org \
--to=vapier-abrp7r+bbdudnm+yrofe0a@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.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;
as well as URLs for NNTP newsgroup(s).