summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2007-11-01 20:51:04 +0000
committerjhb <jhb@FreeBSD.org>2007-11-01 20:51:04 +0000
commit75e6e577d51ead9da09eb80e6a4e62a2e7155bb0 (patch)
treeab38b34a4349dfb0f2c514d8e746af5b72c9ce73 /sbin
parent87794d6837b0161e56f0975715be721f87ed0e83 (diff)
downloadFreeBSD-src-75e6e577d51ead9da09eb80e6a4e62a2e7155bb0.zip
FreeBSD-src-75e6e577d51ead9da09eb80e6a4e62a2e7155bb0.tar.gz
Don't look for GPT primary and secondary tables on a disk unless we have
a valid PMBR. Without this fix, if label a disk with a GPT, then relabel it with an MBR the GPT tables are still present. If you then try to create a GPT with 'gpt create', gpt(8) will fail to open the device because the partitions in the stale GPT overlap with the slices in the MBR. MFC after: 1 week
Diffstat (limited to 'sbin')
-rw-r--r--sbin/gpt/gpt.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sbin/gpt/gpt.c b/sbin/gpt/gpt.c
index 7a76f6d..6085ed2 100644
--- a/sbin/gpt/gpt.c
+++ b/sbin/gpt/gpt.c
@@ -585,10 +585,16 @@ gpt_open(const char *dev)
if (gpt_mbr(fd, 0LL) == -1)
goto close;
- if (gpt_gpt(fd, 1LL) == -1)
- goto close;
- if (gpt_gpt(fd, mediasz / secsz - 1LL) == -1)
- goto close;
+
+ /*
+ * Don't look for a GPT unless we have a valid PMBR.
+ */
+ if (map_find(MAP_TYPE_PMBR) != NULL) {
+ if (gpt_gpt(fd, 1LL) == -1)
+ goto close;
+ if (gpt_gpt(fd, mediasz / secsz - 1LL) == -1)
+ goto close;
+ }
return (fd);
OpenPOWER on IntegriCloud