diff options
| author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-04-23 18:05:05 +0300 | 
|---|---|---|
| committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-04-23 18:05:05 +0300 | 
| commit | d88fa71b8372cbbea0bc6d241a50b1e193fe112d (patch) | |
| tree | 871970a69be188e73fcb93f64ca4e045777da062 /ubi-utils | |
| parent | c48ce65e277fab7bd4968dad4cc0471df084d7f4 (diff) | |
ubi-utils: improve input parameters checks
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'ubi-utils')
| -rw-r--r-- | ubi-utils/new-utils/src/ubiformat.c | 17 | ||||
| -rw-r--r-- | ubi-utils/new-utils/src/ubinize.c | 11 | 
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;  } | 
