From 7fe1087ed4cb54f5e2e5ba3dd3b4b73c7ebc2214 Mon Sep 17 00:00:00 2001 From: David Karoly Date: Tue, 6 Sep 2022 19:02:50 +0200 Subject: [PATCH] bfs: fix alignment of struct dirent This is needed on ARMv7 as inode number is stored using STRD instruction which can result in alignment fault even when SCTLR.A bit is disabled. see ARMARM section A3.2.1, Unaligned data access Change-Id: Ib17bf3f78e84ad7987d8158426bc9b27ded28a8e Reviewed-on: https://review.haiku-os.org/c/haiku/+/5623 Tested-by: Commit checker robot Reviewed-by: Adrien Destugues --- src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index 8d120de691..ac027b7569 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -22,7 +22,10 @@ // TODO: temporary solution as long as there is no public I/O requests API #ifndef FS_SHELL # include +# include # include +#else +# include "fssh_kernel_priv.h" #endif @@ -1759,7 +1762,7 @@ bfs_read_dir(fs_volume* _volume, fs_vnode* _node, void* _cookie, dirent->d_dev = volume->ID(); dirent->d_ino = id; - dirent->d_reclen = offsetof(struct dirent, d_name) + length + 1; + dirent->d_reclen = ROUNDUP(offsetof(struct dirent, d_name) + length + 1, sizeof(void*)); bufferSize -= dirent->d_reclen; dirent = (struct dirent*)((uint8*)dirent + dirent->d_reclen);