path: root/utils.c
diff options
authorZach Brown <>2013-01-17 11:54:47 -0800
committerZach Brown <>2013-02-05 16:09:32 -0800
commit52162700bb59663add809a6465ce2769d80b3664 (patch)
tree5cd021a31a6e098ee5e9b9c6b47b02f70f3f147d /utils.c
parent2161e1b6f35d1c084fda49b479951219117c86e9 (diff)
btrfs-progs: treat super.magic as an le64
The super block magic is a le64 whose value looks like an unterminated string in memory. The lack of null termination leads to clumsy use of string functions and causes static analysis tools to warn that the string will be unterminated. So let's just treat it as the le64 that it is. Endian wrappers are used on the constant so that they're compiled into run-time constants. Signed-off-by: Zach Brown <>
Diffstat (limited to 'utils.c')
1 files changed, 2 insertions, 3 deletions
diff --git a/utils.c b/utils.c
index d92f3178..d2dec6fd 100644
--- a/utils.c
+++ b/utils.c
@@ -112,7 +112,7 @@ int make_btrfs(int fd, const char *device, const char *label,
btrfs_set_super_bytenr(&super, blocks[0]);
btrfs_set_super_num_devices(&super, 1);
- strncpy((char *)&super.magic, BTRFS_MAGIC, sizeof(super.magic));
+ super.magic = cpu_to_le64(BTRFS_MAGIC);
btrfs_set_super_generation(&super, 1);
btrfs_set_super_root(&super, blocks[1]);
btrfs_set_super_chunk_root(&super, blocks[3]);
@@ -1085,8 +1085,7 @@ int btrfs_device_already_in_root(struct btrfs_root *root, int fd,
ret = 0;
disk_super = (struct btrfs_super_block *)buf;
- if (strncmp((char *)(&disk_super->magic), BTRFS_MAGIC,
- sizeof(disk_super->magic)))
+ if (disk_super->magic != cpu_to_le64(BTRFS_MAGIC))
goto brelse;
if (!memcmp(disk_super->fsid, root->fs_info->super_copy.fsid,