summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-04-23 18:05:05 +0300
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-04-23 18:05:05 +0300
commitd88fa71b8372cbbea0bc6d241a50b1e193fe112d (patch)
tree871970a69be188e73fcb93f64ca4e045777da062
parentc48ce65e277fab7bd4968dad4cc0471df084d7f4 (diff)
ubi-utils: improve input parameters checks
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r--ubi-utils/new-utils/src/ubiformat.c17
-rw-r--r--ubi-utils/new-utils/src/ubinize.c11
2 files changed, 24 insertions, 4 deletions
diff --git a/ubi-utils/new-utils/src/ubiformat.c b/ubi-utils/new-utils/src/ubiformat.c
index fe08f6f..8d13237 100644
--- a/ubi-utils/new-utils/src/ubiformat.c
+++ b/ubi-utils/new-utils/src/ubiformat.c
@@ -135,7 +135,7 @@ static int parse_opt(int argc, char * const argv[])
case 'O':
args.vid_hdr_offs = strtoul(optarg, &endp, 0);
- if (args.vid_hdr_offs < 0 || *endp != '\0' || endp == optarg)
+ if (args.vid_hdr_offs <= 0 || *endp != '\0' || endp == optarg)
return errmsg("bad VID header offset: \"%s\"", optarg);
break;
@@ -523,12 +523,25 @@ int main(int argc, char * const argv[])
args.subpage_size = mtd.min_io_size;
else {
if (args.subpage_size > mtd.min_io_size) {
- errmsg("sub-page cannot be larger then min. I/O unit");
+ errmsg("sub-page cannot be larger than min. I/O unit");
goto out_close;
}
if (mtd.min_io_size % args.subpage_size) {
errmsg("min. I/O unit size should be multiple of sub-page size");
+ goto out_close;
+ }
+ }
+
+ /* Validate VID header offset if it was specified */
+ if (args.vid_hdr_offs != 0) {
+ if (args.vid_hdr_offs % 8) {
+ errmsg("VID header offset has to be multiple of min. I/O unit size");
+ goto out_close;
+ }
+ if (args.vid_hdr_offs + UBI_VID_HDR_SIZE > mtd.eb_size) {
+ errmsg("bad VID header offset");
+ goto out_close;
}
}
diff --git a/ubi-utils/new-utils/src/ubinize.c b/ubi-utils/new-utils/src/ubinize.c
index 704d906..8ba8869 100644
--- a/ubi-utils/new-utils/src/ubinize.c
+++ b/ubi-utils/new-utils/src/ubinize.c
@@ -239,6 +239,9 @@ static int parse_opt(int argc, char * const argv[])
if (args.peb_size < 0)
return errmsg("physical eraseblock size was not specified (use -h for help)");
+ if (args.peb_size > 1024*1024)
+ return errmsg("too high physical eraseblock size %d", args.peb_size);
+
if (args.min_io_size < 0)
return errmsg("min. I/O unit size was not specified (use -h for help)");
@@ -257,8 +260,12 @@ static int parse_opt(int argc, char * const argv[])
if (!args.f_out)
return errmsg("output file was not specified (use -h for help)");
- if (args.vid_hdr_offs && args.vid_hdr_offs + UBI_VID_HDR_SIZE >= args.peb_size)
- return errmsg("bad VID header position");
+ if (args.vid_hdr_offs) {
+ if (args.vid_hdr_offs + UBI_VID_HDR_SIZE >= args.peb_size)
+ return errmsg("bad VID header position");
+ if (args.vid_hdr_offs % 8)
+ return errmsg("VID header offset has to be multiple of min. I/O unit size");
+ }
return 0;
}