diff options
author | 2015-11-15 01:22:39 +0000 | |
---|---|---|
committer | 2015-11-15 01:22:39 +0000 | |
commit | 0df3379f5d8ebffff32bf45e14d2b2393ed40cb7 (patch) | |
tree | e9a5488fcd2571aa45cd66fdd96feb0370557778 | |
parent | Vi needs flock, for those who haven't set nolock in .exrc for years... (diff) | |
download | wireguard-openbsd-0df3379f5d8ebffff32bf45e14d2b2393ed40cb7.tar.xz wireguard-openbsd-0df3379f5d8ebffff32bf45e14d2b2393ed40cb7.zip |
Move zapping of invalid GPT data into GPT_get_gpt() rather than
returning a value to tell callers to zap it. Use consistant idiom
to check for the presence of a GPT (check gh.gh_sig). When zapping
GPT, always zap both the header and partition table just for
paranoia's sake.
-rw-r--r-- | sbin/fdisk/fdisk.c | 11 | ||||
-rw-r--r-- | sbin/fdisk/gpt.c | 12 | ||||
-rw-r--r-- | sbin/fdisk/gpt.h | 4 |
3 files changed, 15 insertions, 12 deletions
diff --git a/sbin/fdisk/fdisk.c b/sbin/fdisk/fdisk.c index d4ee829df9f..68a9a9a075d 100644 --- a/sbin/fdisk/fdisk.c +++ b/sbin/fdisk/fdisk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fdisk.c,v 1.88 2015/11/14 21:17:08 krw Exp $ */ +/* $OpenBSD: fdisk.c,v 1.89 2015/11/15 01:22:39 krw Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -162,9 +162,9 @@ main(int argc, char *argv[]) DISK_open(); /* Get the GPT if present. */ - if (GPT_get_gpt()) { - memset(&gh, 0, sizeof(gh)); - memset(&gp, 0, sizeof(gp)); + GPT_get_gpt(); + + if (letoh64(gh.gh_sig) != GPTSIGNATURE) { if (DL_GETDSIZE(&dl) > disk.size) warnx("disk too large (%llu sectors). size truncated.", (unsigned long long)DL_GETDSIZE(&dl)); @@ -205,7 +205,8 @@ main(int argc, char *argv[]) close(fd); } if (f_flag || MBR_protective_mbr(&initial_mbr) != 0) { - memset(&gh, 0, sizeof(struct gpt_header)); + memset(&gh, 0, sizeof(gh)); + memset(&gp, 0, sizeof(gp)); MBR_parse(&dos_mbr, 0, 0, &initial_mbr); } diff --git a/sbin/fdisk/gpt.c b/sbin/fdisk/gpt.c index a0e604ef5d8..2b8fdda5cb5 100644 --- a/sbin/fdisk/gpt.c +++ b/sbin/fdisk/gpt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gpt.c,v 1.5 2015/11/13 02:27:17 krw Exp $ */ +/* $OpenBSD: gpt.c,v 1.6 2015/11/15 01:22:39 krw Exp $ */ /* * Copyright (c) 2015 Markus Muller <mmu@grummel.net> * Copyright (c) 2015 Kenneth R Westerback <krw@openbsd.org> @@ -190,7 +190,7 @@ GPT_get_partition_table(off_t where) return (0); } -int +void GPT_get_gpt(void) { int privalid, altvalid; @@ -203,15 +203,17 @@ GPT_get_gpt(void) if (privalid == 0) privalid = GPT_get_partition_table(gh.gh_part_lba); if (privalid == 0) - return (0); + return; altvalid = GPT_get_header(DL_GETDSIZE(&dl) - 1); if (altvalid == 0) altvalid = GPT_get_partition_table(gh.gh_part_lba); if (altvalid == 0) - return (0); + return; - return (1); + /* No valid GPT found. Zap any artifacts. */ + memset(&gh, 0, sizeof(gh)); + memset(&gp, 0, sizeof(gp)); } void diff --git a/sbin/fdisk/gpt.h b/sbin/fdisk/gpt.h index a428709dedc..058435bd9d8 100644 --- a/sbin/fdisk/gpt.h +++ b/sbin/fdisk/gpt.h @@ -1,4 +1,4 @@ -/* $OpenBSD: gpt.h,v 1.3 2015/11/13 02:27:17 krw Exp $ */ +/* $OpenBSD: gpt.h,v 1.4 2015/11/15 01:22:39 krw Exp $ */ /* * Copyright (c) 2015 Markus Muller <mmu@grummel.net> * Copyright (c) 2015 Kenneth R Westerback <krw@openbsd.org> @@ -18,7 +18,7 @@ int GPT_get_hdr(off_t); int GPT_get_partition_table(off_t); -int GPT_get_gpt(void); +void GPT_get_gpt(void); int GPT_init(void); int GPT_write(void); |