mirror of
				https://github.com/Zygo/bees.git
				synced 2025-11-03 19:50:34 +01:00 
			
		
		
		
	fs: avoid unaligned access when copying btrfs search headers
The assignment operator will use member-wise assignment, which assumes the object's this pointer is aligned. That doesn't happen when the object in question is part of a btrfs search result, and aarch64 faults over it. Use memcpy instead, which has no alignment constraints. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
		@@ -748,7 +748,7 @@ namespace crucible {
 | 
			
		||||
	BtrfsIoctlSearchHeader::set_data(const vector<uint8_t> &v, size_t offset)
 | 
			
		||||
	{
 | 
			
		||||
		THROW_CHECK2(invalid_argument, offset, v.size(), offset + sizeof(btrfs_ioctl_search_header) <= v.size());
 | 
			
		||||
		*static_cast<btrfs_ioctl_search_header *>(this) = *reinterpret_cast<const btrfs_ioctl_search_header *>(&v[offset]);
 | 
			
		||||
		memcpy(static_cast<btrfs_ioctl_search_header *>(this), &v[offset], sizeof(btrfs_ioctl_search_header));
 | 
			
		||||
		offset += sizeof(btrfs_ioctl_search_header);
 | 
			
		||||
		THROW_CHECK2(invalid_argument, offset + len, v.size(), offset + len <= v.size());
 | 
			
		||||
		m_data = Spanner<const uint8_t>(&v[offset], &v[offset + len]);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user