summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2015-11-15 01:22:39 +0000
committerkrw <krw@openbsd.org>2015-11-15 01:22:39 +0000
commit0df3379f5d8ebffff32bf45e14d2b2393ed40cb7 (patch)
treee9a5488fcd2571aa45cd66fdd96feb0370557778
parentVi needs flock, for those who haven't set nolock in .exrc for years... (diff)
downloadwireguard-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.c11
-rw-r--r--sbin/fdisk/gpt.c12
-rw-r--r--sbin/fdisk/gpt.h4
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);