Module Name: src Committed By: mlelstv Date: Mon Mar 19 09:06:21 UTC 2018
Modified Files: src/sbin/gpt: gpt.8 gpt.h main.c set.c type.c unset.c Log Message: Check device parameter to avoid segfaults. Agument synopsis for -l option. To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/sbin/gpt/gpt.8 cvs rdiff -u -r1.36 -r1.37 src/sbin/gpt/gpt.h cvs rdiff -u -r1.10 -r1.11 src/sbin/gpt/main.c cvs rdiff -u -r1.13 -r1.14 src/sbin/gpt/set.c src/sbin/gpt/type.c \ src/sbin/gpt/unset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/gpt/gpt.8 diff -u src/sbin/gpt/gpt.8:1.57 src/sbin/gpt/gpt.8:1.58 --- src/sbin/gpt/gpt.8:1.57 Mon Jan 15 12:20:47 2018 +++ src/sbin/gpt/gpt.8 Mon Mar 19 09:06:20 2018 @@ -1,4 +1,4 @@ -.\" $NetBSD: gpt.8,v 1.57 2018/01/15 12:20:47 sborrill Exp $ +.\" $NetBSD: gpt.8,v 1.58 2018/03/19 09:06:20 mlelstv Exp $ .\" .\" Copyright (c) 2002 Marcel Moolenaar .\" All rights reserved. @@ -41,6 +41,15 @@ .Ar command .Op Ar command_options .Ar device +.Nm +.Ar set +.Fl l +.Nm +.Ar unset +.Fl l +.Nm +.Ar type +.Fl l .Sh DESCRIPTION The .Nm Index: src/sbin/gpt/gpt.h diff -u src/sbin/gpt/gpt.h:1.36 src/sbin/gpt/gpt.h:1.37 --- src/sbin/gpt/gpt.h:1.36 Wed Sep 6 18:17:18 2017 +++ src/sbin/gpt/gpt.h Mon Mar 19 09:06:20 2018 @@ -81,6 +81,7 @@ gpt_t gpt_open(const char *, int, int, o #define GPT_NOSYNC 0x08 #define GPT_FILE 0x10 #define GPT_TIMESTAMP 0x20 +#define GPT_OPTDEV 0x8000 void* gpt_read(gpt_t, off_t, size_t); off_t gpt_last(gpt_t); Index: src/sbin/gpt/main.c diff -u src/sbin/gpt/main.c:1.10 src/sbin/gpt/main.c:1.11 --- src/sbin/gpt/main.c:1.10 Thu Feb 16 22:40:19 2017 +++ src/sbin/gpt/main.c Mon Mar 19 09:06:20 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.10 2017/02/16 22:40:19 christos Exp $ */ +/* $NetBSD: main.c,v 1.11 2018/03/19 09:06:20 mlelstv Exp $ */ /*- * Copyright (c) 2002 Marcel Moolenaar @@ -34,7 +34,7 @@ #include <sys/cdefs.h> #ifdef __RCSID -__RCSID("$NetBSD: main.c,v 1.10 2017/02/16 22:40:19 christos Exp $"); +__RCSID("$NetBSD: main.c,v 1.11 2018/03/19 09:06:20 mlelstv Exp $"); #endif #include <stdio.h> @@ -241,6 +241,9 @@ main(int argc, char *argv[]) if (gpt == NULL) return EXIT_FAILURE; } else { + if ((cmdsw[i]->flags & GPT_OPTDEV) == 0) + errx(EXIT_FAILURE, + "Command %s needs a device parameter", cmd); argc++; gpt = NULL; } Index: src/sbin/gpt/set.c diff -u src/sbin/gpt/set.c:1.13 src/sbin/gpt/set.c:1.14 --- src/sbin/gpt/set.c:1.13 Tue Dec 29 16:45:04 2015 +++ src/sbin/gpt/set.c Mon Mar 19 09:06:20 2018 @@ -33,7 +33,7 @@ __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $"); #endif #ifdef __RCSID -__RCSID("$NetBSD: set.c,v 1.13 2015/12/29 16:45:04 christos Exp $"); +__RCSID("$NetBSD: set.c,v 1.14 2018/03/19 09:06:20 mlelstv Exp $"); #endif #include <sys/types.h> @@ -60,7 +60,7 @@ struct gpt_cmd c_set = { "set", cmd_set, sethelp, __arraycount(sethelp), - 0, + GPT_OPTDEV, }; #define usage() gpt_usage(NULL, &c_set) @@ -75,11 +75,11 @@ cmd_set(gpt_t gpt, int argc, char *argv[ while ((ch = getopt(argc, argv, "a:i:l")) != -1) { switch(ch) { case 'a': - if (gpt_attr_get(gpt, &attributes) == -1) + if (gpt == NULL || gpt_attr_get(gpt, &attributes) == -1) return usage(); break; case 'i': - if (gpt_uint_get(gpt, &entry) == -1) + if (gpt == NULL || gpt_uint_get(gpt, &entry) == -1) return usage(); break; case 'l': @@ -90,7 +90,7 @@ cmd_set(gpt_t gpt, int argc, char *argv[ } } - if (argc != optind) + if (gpt == NULL || argc != optind) return usage(); return gpt_attr_update(gpt, entry, attributes, 0); Index: src/sbin/gpt/type.c diff -u src/sbin/gpt/type.c:1.13 src/sbin/gpt/type.c:1.14 --- src/sbin/gpt/type.c:1.13 Sun Dec 6 00:39:26 2015 +++ src/sbin/gpt/type.c Mon Mar 19 09:06:20 2018 @@ -33,7 +33,7 @@ __FBSDID("$FreeBSD: src/sbin/gpt/remove.c,v 1.10 2006/10/04 18:20:25 marcel Exp $"); #endif #ifdef __RCSID -__RCSID("$NetBSD: type.c,v 1.13 2015/12/06 00:39:26 christos Exp $"); +__RCSID("$NetBSD: type.c,v 1.14 2018/03/19 09:06:20 mlelstv Exp $"); #endif #include <sys/types.h> @@ -61,7 +61,7 @@ struct gpt_cmd c_type = { "type", cmd_type, typehelp, __arraycount(typehelp), - 0, + GPT_OPTDEV, }; #define usage() gpt_usage(NULL, &c_type) @@ -91,17 +91,17 @@ cmd_type(gpt_t gpt, int argc, char *argv gpt_uuid_help("\t"); return 0; case 'T': - if (gpt_uuid_get(gpt, &newtype) == -1) + if (gpt == NULL || gpt_uuid_get(gpt, &newtype) == -1) return -1; break; default: - if (gpt_add_find(gpt, &find, ch) == -1) + if (gpt == NULL || gpt_add_find(gpt, &find, ch) == -1) return usage(); break; } } - if (gpt_uuid_is_nil(newtype) || argc != optind) + if (gpt == NULL || gpt_uuid_is_nil(newtype) || argc != optind) return usage(); return gpt_change_ent(gpt, &find, change, &newtype); Index: src/sbin/gpt/unset.c diff -u src/sbin/gpt/unset.c:1.13 src/sbin/gpt/unset.c:1.14 --- src/sbin/gpt/unset.c:1.13 Tue Dec 29 16:45:04 2015 +++ src/sbin/gpt/unset.c Mon Mar 19 09:06:20 2018 @@ -33,7 +33,7 @@ __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $"); #endif #ifdef __RCSID -__RCSID("$NetBSD: unset.c,v 1.13 2015/12/29 16:45:04 christos Exp $"); +__RCSID("$NetBSD: unset.c,v 1.14 2018/03/19 09:06:20 mlelstv Exp $"); #endif #include <sys/types.h> @@ -53,13 +53,14 @@ static int cmd_unset(gpt_t, int, char *[ static const char *unsethelp[] = { "-a attribute -i index", + "-l", }; struct gpt_cmd c_unset = { "unset", cmd_unset, unsethelp, __arraycount(unsethelp), - 0, + GPT_OPTDEV, }; #define usage() gpt_usage(NULL, &c_unset) @@ -74,11 +75,11 @@ cmd_unset(gpt_t gpt, int argc, char *arg while ((ch = getopt(argc, argv, "a:i:l")) != -1) { switch(ch) { case 'a': - if (gpt_attr_get(gpt, &attributes) == -1) + if (gpt == NULL || gpt_attr_get(gpt, &attributes) == -1) return usage(); break; case 'i': - if (gpt_uint_get(gpt, &entry) == -1) + if (gpt == NULL || gpt_uint_get(gpt, &entry) == -1) return usage(); break; case 'l': @@ -89,7 +90,7 @@ cmd_unset(gpt_t gpt, int argc, char *arg } } - if (argc != optind) + if (gpt == NULL || argc != optind) return usage(); return gpt_attr_update(gpt, entry, 0, attributes);