summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2016-01-26 21:07:54 +0000
committerkrw <krw@openbsd.org>2016-01-26 21:07:54 +0000
commit38bdfd734d3af2cad2681dd2e615cd0996ed2215 (patch)
tree69d471e39379c5236f1d584d479fe928383214d9
parentRemove needless zeroing. Anonymously mapped memory is always zeroed. (diff)
downloadwireguard-openbsd-38bdfd734d3af2cad2681dd2e615cd0996ed2215.tar.xz
wireguard-openbsd-38bdfd734d3af2cad2681dd2e615cd0996ed2215.zip
dpme_name and dpme_type are NUL-terminated in Apple code, so use
strlcpy() to fill them. They are also supposed to be NUL-padded so zap previous contents before copying in possibly shorter new values.
-rw-r--r--sbin/pdisk/dump.c5
-rw-r--r--sbin/pdisk/file_media.c8
-rw-r--r--sbin/pdisk/partition_map.c12
-rw-r--r--sbin/pdisk/pdisk.c16
4 files changed, 26 insertions, 15 deletions
diff --git a/sbin/pdisk/dump.c b/sbin/pdisk/dump.c
index 0212f6751de..4a1d1e02d56 100644
--- a/sbin/pdisk/dump.c
+++ b/sbin/pdisk/dump.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dump.c,v 1.55 2016/01/26 16:39:00 krw Exp $ */
+/* $OpenBSD: dump.c,v 1.56 2016/01/26 21:07:54 krw Exp $ */
/*
* dump.c - dumping partition maps
@@ -130,8 +130,7 @@ dump_partition_entry(struct partition_map *entry, int type_length,
printf("%2ld: %*.32s", entry->disk_address, type_length, p->dpme_type);
buf = malloc(name_length + 1);
- strncpy(buf, p->dpme_name, name_length);
- buf[name_length] = 0;
+ strlcpy(buf, p->dpme_name, name_length+1);
printf("%c%-*.32s ", driver, name_length, buf);
free(buf);
diff --git a/sbin/pdisk/file_media.c b/sbin/pdisk/file_media.c
index 99c57db322c..f1f58cfd903 100644
--- a/sbin/pdisk/file_media.c
+++ b/sbin/pdisk/file_media.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: file_media.c,v 1.42 2016/01/26 16:13:09 krw Exp $ */
+/* $OpenBSD: file_media.c,v 1.43 2016/01/26 21:07:54 krw Exp $ */
/*
* file_media.c -
@@ -282,11 +282,11 @@ read_dpme(int fd, uint64_t sector, struct dpme *dpme)
memcpy(dpme->dpme_reserved_4, dpme_ondisk->dpme_reserved_4,
sizeof(dpme->dpme_reserved_4));
- memcpy(dpme->dpme_name, dpme_ondisk->dpme_name,
+ strlcpy(dpme->dpme_name, dpme_ondisk->dpme_name,
sizeof(dpme->dpme_name));
- memcpy(dpme->dpme_type, dpme_ondisk->dpme_type,
+ strlcpy(dpme->dpme_type, dpme_ondisk->dpme_type,
sizeof(dpme->dpme_type));
- memcpy(dpme->dpme_processor_id, dpme_ondisk->dpme_processor_id,
+ strlcpy(dpme->dpme_processor_id, dpme_ondisk->dpme_processor_id,
sizeof(dpme->dpme_processor_id));
free(dpme_ondisk);
diff --git a/sbin/pdisk/partition_map.c b/sbin/pdisk/partition_map.c
index 4493efcc4b3..6308843b30c 100644
--- a/sbin/pdisk/partition_map.c
+++ b/sbin/pdisk/partition_map.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: partition_map.c,v 1.67 2016/01/26 16:39:00 krw Exp $ */
+/* $OpenBSD: partition_map.c,v 1.68 2016/01/26 21:07:54 krw Exp $ */
/*
* partition_map.c - partition map routines
@@ -277,8 +277,10 @@ create_partition_map(int fd, char *name, u_int64_t mediasz, uint32_t sectorsz)
dpme->dpme_map_entries = 1;
dpme->dpme_pblock_start = 1;
dpme->dpme_pblocks = map->media_size - 1;
- strncpy(dpme->dpme_name, kFreeName, DPISTRLEN);
- strncpy(dpme->dpme_type, kFreeType, DPISTRLEN);
+ strlcpy(dpme->dpme_name, kFreeName,
+ sizeof(dpme->dpme_name));
+ strlcpy(dpme->dpme_type, kFreeType,
+ sizeof(dpme->dpme_type));
dpme->dpme_lblock_start = 0;
dpme->dpme_lblocks = dpme->dpme_pblocks;
dpme->dpme_flags = DPME_WRITABLE | DPME_READABLE |
@@ -477,8 +479,8 @@ create_dpme(const char *name, const char *dptype, uint32_t base,
dpme->dpme_map_entries = 1;
dpme->dpme_pblock_start = base;
dpme->dpme_pblocks = length;
- strncpy(dpme->dpme_name, name, DPISTRLEN);
- strncpy(dpme->dpme_type, dptype, DPISTRLEN);
+ strlcpy(dpme->dpme_name, name, sizeof(dpme->dpme_name));
+ strlcpy(dpme->dpme_type, dptype, sizeof(dpme->dpme_type));
dpme->dpme_lblock_start = 0;
dpme->dpme_lblocks = dpme->dpme_pblocks;
dpme_init_flags(dpme);
diff --git a/sbin/pdisk/pdisk.c b/sbin/pdisk/pdisk.c
index a82f1f96d5b..2649e889a91 100644
--- a/sbin/pdisk/pdisk.c
+++ b/sbin/pdisk/pdisk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pdisk.c,v 1.70 2016/01/26 16:39:00 krw Exp $ */
+/* $OpenBSD: pdisk.c,v 1.71 2016/01/26 21:07:54 krw Exp $ */
/*
* pdisk - an editor for Apple format partition tables
@@ -356,8 +356,13 @@ do_rename_partition(struct partition_map_header *map)
if (entry == NULL) {
printf("No such partition\n");
} else {
- /* stuff name into partition map entry dpme */
- strncpy(entry->dpme->dpme_name, name, DPISTRLEN);
+ /*
+ * Since dpme_name is supposed to be NUL-filled, make sure
+ * current contents are zapped before copying in new name!
+ */
+ memset(entry->dpme->dpme_name, 0,
+ sizeof(entry->dpme->dpme_name));
+ strlcpy(entry->dpme->dpme_name, name, DPISTRLEN);
map->changed = 1;
}
free(name);
@@ -386,6 +391,11 @@ do_change_type(struct partition_map_header *map)
bad_input("Bad type");
goto out;
}
+ /*
+ * Since dpme_type is supposed to be NUL-filled, make sure
+ * current contents are zapped before copying in new type!
+ */
+ memset(entry->dpme->dpme_type, 0, sizeof(entry->dpme->dpme_type));
strncpy(entry->dpme->dpme_type, type, DPISTRLEN);
map->changed = 1;