From 335aacbf1a503271cff253124ffdccd870210cbe Mon Sep 17 00:00:00 2001 From: "liang.huang" Date: Wed, 15 Jul 2026 06:58:25 +0800 Subject: [PATCH] arch/common: fix host_flags_to_mode() O_RDONLY sentinel collision host_flags_to_mode() used a trailing 0 entry in modeflags[] as the loop-termination sentinel. O_RDONLY is defined as 0 and is exactly modeflags[1], so the loop's termination check fired before ever comparing that entry, and a bare O_RDONLY open always fell through to -EINVAL. Bound the loop by array size (nitems()) instead of a value sentinel. Signed-off-by: liang.huang --- arch/arm/src/common/arm_hostfs.c | 4 ++-- arch/arm64/src/common/arm64_hostfs.c | 4 ++-- arch/risc-v/src/common/riscv_hostfs.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/arm/src/common/arm_hostfs.c b/arch/arm/src/common/arm_hostfs.c index 9f3d829c365..fbfd9a52485 100644 --- a/arch/arm/src/common/arm_hostfs.c +++ b/arch/arm/src/common/arm_hostfs.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -94,11 +95,10 @@ static int host_flags_to_mode(int flags) O_WRONLY | O_CREAT | O_APPEND, O_RDWR | O_CREAT | O_APPEND | O_TEXT, O_RDWR | O_CREAT | O_APPEND, - 0, }; int i; - for (i = 0; modeflags[i] != 0; i++) + for (i = 0; i < nitems(modeflags); i++) { if ((modemasks & flags) == modeflags[i]) { diff --git a/arch/arm64/src/common/arm64_hostfs.c b/arch/arm64/src/common/arm64_hostfs.c index 0bcbef7b098..ddd064ed07d 100644 --- a/arch/arm64/src/common/arm64_hostfs.c +++ b/arch/arm64/src/common/arm64_hostfs.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -94,11 +95,10 @@ static int host_flags_to_mode(int flags) O_WRONLY | O_CREAT | O_APPEND, O_RDWR | O_CREAT | O_APPEND | O_TEXT, O_RDWR | O_CREAT | O_APPEND, - 0, }; int i; - for (i = 0; modeflags[i] != 0; i++) + for (i = 0; i < nitems(modeflags); i++) { if ((modemasks & flags) == modeflags[i]) { diff --git a/arch/risc-v/src/common/riscv_hostfs.c b/arch/risc-v/src/common/riscv_hostfs.c index a22ea85440f..c077044054e 100644 --- a/arch/risc-v/src/common/riscv_hostfs.c +++ b/arch/risc-v/src/common/riscv_hostfs.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -94,11 +95,10 @@ static int host_flags_to_mode(int flags) O_WRONLY | O_CREAT | O_APPEND, O_RDWR | O_CREAT | O_APPEND | O_TEXT, O_RDWR | O_CREAT | O_APPEND, - 0, }; int i; - for (i = 0; modeflags[i] != 0; i++) + for (i = 0; i < nitems(modeflags); i++) { if ((modemasks & flags) == modeflags[i]) {