mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Fix nvlist 'Bus Error' for Sparc
The mis-aligned memory accesses in nvpair_native_embedded() and nvpair_native_embedded_array() will cause a 'Bus Error' for architectures such as Sparc which not fully byte addressible. To avoid this issue care is taken to avoid dereferencing the potentially mis-aligned packed nvlist_t. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ned Bass <bass6@llnl.gov> Signed-off-by: marku89 <mar42@kola.li> Issue #1700
This commit is contained in:
parent
7f89ae6ba0
commit
aa0218d6a1
@ -2580,7 +2580,8 @@ nvpair_native_embedded(nvstream_t *nvs, nvpair_t *nvp)
|
|||||||
* structure. The address may not be aligned, so we have
|
* structure. The address may not be aligned, so we have
|
||||||
* to use bzero.
|
* to use bzero.
|
||||||
*/
|
*/
|
||||||
bzero(&packed->nvl_priv, sizeof (packed->nvl_priv));
|
bzero((char *)packed + offsetof(nvlist_t, nvl_priv),
|
||||||
|
sizeof (uint64_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
return (nvs_embedded(nvs, EMBEDDED_NVL(nvp)));
|
return (nvs_embedded(nvs, EMBEDDED_NVL(nvp)));
|
||||||
@ -2608,7 +2609,8 @@ nvpair_native_embedded_array(nvstream_t *nvs, nvpair_t *nvp)
|
|||||||
* packed structure. The address may not be aligned,
|
* packed structure. The address may not be aligned,
|
||||||
* so we have to use bzero.
|
* so we have to use bzero.
|
||||||
*/
|
*/
|
||||||
bzero(&packed->nvl_priv, sizeof (packed->nvl_priv));
|
bzero((char *)packed + offsetof(nvlist_t, nvl_priv),
|
||||||
|
sizeof (uint64_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
return (nvs_embedded_nvl_array(nvs, nvp, NULL));
|
return (nvs_embedded_nvl_array(nvs, nvp, NULL));
|
||||||
|
Loading…
Reference in New Issue
Block a user