diff options
author | jhb <jhb@FreeBSD.org> | 2007-11-01 20:51:04 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2007-11-01 20:51:04 +0000 |
commit | 75e6e577d51ead9da09eb80e6a4e62a2e7155bb0 (patch) | |
tree | ab38b34a4349dfb0f2c514d8e746af5b72c9ce73 /sbin/gpt | |
parent | 87794d6837b0161e56f0975715be721f87ed0e83 (diff) | |
download | FreeBSD-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/gpt')
-rw-r--r-- | sbin/gpt/gpt.c | 14 |
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); |