nuttx/include
dongjiuzhu1 148f0ce7dd fs/inode: use file_allocate,file_dup to avoid racecondition to allocate fd
issue description:
task A:                                            NSH:
1.open->                                           reboot->sync->task_fsfsync
2.nx_vopen->               context switch
3.fdlist_allocate:            ---->                4.fsync->file_sync->assert(inode or priv is empty)
(new fd with empty filep)
5.file_vopen:
(init empty filep)
6.return fd

Task A allocates a new fd with an empty filep in fdlist_allocate. Before
it can fully initialize the filep in file_vopen, the NSH task triggers a
file - system sync operation. The sync operation encounters the empty
filep associated with the newly allocated fd, causing the assertion to
fail and the system to crash.

To resolve this race condition, we should modify the fd allocation
process. Instead of allocating a new fd with an empty filep first and
then initializing it later, we should use the file_allocate_from_inode
function. This function allows us to initialize the file structure first
and then bind it to the new filep when allocating the fd. By doing so,
we ensure that the filep is always properly initialized before it is
used in any file - system operations, thus preventing the assertion
failure and the subsequent system crash.

Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
2026-01-09 17:11:25 +08:00
..
android
arpa
crypto LICENSE: update NuttX-PublicDomain SPDX identifier 2025-12-26 19:46:12 +08:00
cxx cxx/cstddef: expose 'max_align_t' 2025-12-09 18:03:10 +08:00
net net/ethernet: change struct ifreq to consistent with Linux 2025-12-27 20:34:17 +08:00
netinet tcp.h: add TCP_CORK definition 2025-12-18 15:38:17 +08:00
netpacket net/packet: add PACKET_<ADD|DROP>_MEMBERSHIP support 2025-12-25 10:01:43 +08:00
nuttx fs/inode: use file_allocate,file_dup to avoid racecondition to allocate fd 2026-01-09 17:11:25 +08:00
ssp
sys syscall/adjtime: fix minior issue about adjtime and add clock_adjtime to syscall 2025-12-30 10:22:09 -03:00
.gitignore
aio.h
alloca.h
assert.h
byteswap.h
ctype.h
debug.h drivers/timers/ptp: support ptp clock driver model 2025-12-30 10:22:09 -03:00
dirent.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
dlfcn.h
dsp.h style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
dspb16.h style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
elf.h arch:use ARCH_64BIT to mark arch is support 64bit 2025-12-18 22:05:12 +08:00
elf32.h
elf64.h
endian.h
err.h
errno.h
execinfo.h
fcntl.h drivers/fs: Control the behavior of FTL by passing oflags during the open process. 2025-07-16 14:11:41 +08:00
fixedmath.h style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
fnmatch.h
ftw.h
gcov.h gcov: Refactoring the implementation framework of gcov 2025-07-03 00:17:58 +08:00
getopt.h
glob.h
grp.h
hex2bin.h
iconv.h
ifaddrs.h
imx_container.h arch/arm64/imx9: Add ROMAPI and AHAB support for i.MX9 2025-05-09 19:21:17 +08:00
inttypes.h inttype.h: add PRIuTM(time_t) to handle TIME64 & TIME32 print compatible 2025-12-01 10:07:49 +01:00
iso646.h
langinfo.h
libgen.h
libintl.h
limits.h
locale.h style/FAR: remove FAR qualifier 2025-11-10 10:56:29 +01:00
lzf.h
malloc.h
mqueue.h
netdb.h
nl_types.h
nxflat.h
obstack.h
poll.h
pthread.h style/FAR: remove FAR qualifier 2025-11-10 10:56:29 +01:00
pty.h
pwd.h
regex.h
resolv.h
sched.h sched: remove csection and reduce the interrupt disabling time in sched_[un]lock 2025-01-23 19:58:49 +08:00
search.h LICENSE: update NuttX-PublicDomain SPDX identifier 2025-12-26 19:46:12 +08:00
semaphore.h sched/semaphore: add support to customize semaphore max allowed value 2025-09-04 09:48:34 +08:00
shadow.h
signal.h
spawn.h
stdbool.h
stddef.h
stdint.h
stdio.h stdio: disable fortify of snprintf/sprintf for clang 2025-12-09 08:23:14 -03:00
stdlib.h include/stdlib.h: define system()'s prototype for the flat build 2025-02-07 09:03:14 +08:00
stdnoreturn.h
string.h string:use builtin function to optimize libc function 2025-12-20 10:38:53 +08:00
strings.h libc: remove reference to non-existent readme 2025-10-11 17:07:51 -04:00
syscall.h
syslog.h drivers/syslog: Add RFC 5424 protocol support 2025-06-13 20:26:57 +08:00
termios.h include: modify for support socat, so need add some macro same as linux 2025-12-10 23:44:14 +08:00
threads.h
time.h
unistd.h libc/unistd: Replace pipe() macro with proper function implementation 2025-11-26 17:18:13 +08:00
utime.h
uuid.h
wait.h
wchar.h fix misspelled names in locally scoped code 2025-05-15 10:12:12 +08:00
wctype.h