diff options
author | Alexander E. Patrakov <patrakov@gmail.com> | 2012-06-04 23:59:55 +0600 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2012-06-04 13:11:56 -0700 |
commit | 269ebc845ebc8b46ef4b0be7fa0005c7fdb95b8d (patch) | |
tree | 1aa2833be9c940ff9266744fec759a943386d037 | |
parent | ba42e1409ece2e9d56728e0ee6a6342c05ec6e52 (diff) | |
download | syslinux-269ebc845ebc8b46ef4b0be7fa0005c7fdb95b8d.tar.gz |
btrfs: Fix booting off a btrfs subvolume.
The subvolume name in path.data is not NUL-terminated, so don't use
strcmp on it.
Before this patch, it would accumulate the following (given
subvolumes with names "ext2_saved", "home", "gentoo" and "boot"):
ext2_saved
home_saved
gentooaved
bootooaved
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r-- | core/fs/btrfs/btrfs.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/core/fs/btrfs/btrfs.c b/core/fs/btrfs/btrfs.c index b6a14e3b..aeb7614a 100644 --- a/core/fs/btrfs/btrfs.c +++ b/core/fs/btrfs/btrfs.c @@ -602,12 +602,15 @@ static void btrfs_get_fs_tree(struct fs_info *fs) do { do { struct btrfs_root_ref *ref; + int pathlen; if (btrfs_comp_keys_type(&search_key, &path.item.key)) break; ref = (struct btrfs_root_ref *)path.data; - if (!strcmp((char*)(ref + 1), SubvolName)) { + pathlen = path.item.size - sizeof(struct btrfs_root_ref); + + if (!strncmp((char*)(ref + 1), SubvolName, pathlen)) { subvol_ok = true; break; } |