fs/file: add reference count protection for stack-allocated file structures

Issue:
When using a stack-allocated file structure, the sequence:
1. file_open() initializes the stack file structure
2. file_mmap() creates memory mapping and increments reference count
3. file_munmap() decrements reference count and may free the file structure
4. file_close() attempts to close already freed structure → crash

Root cause:
The memory mapping operations (fs_reffilep/fs_putfilep) manage reference counts
independently and can free the stack-allocated file structure prematurely.

Solution:
- Add reference count protection during file_open() for stack-allocated files
- Clear reference count appropriately during file_close()
- This ensures the file structure remains valid throughout its lifetime

Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
dongjiuzhu1
2025-10-09 20:26:02 +08:00
committed by Xiang Xiao
parent ef875f335b
commit cd8e3e18a8
+5
View File
@@ -373,6 +373,11 @@ int file_open(FAR struct file *filep, FAR const char *path, int oflags, ...)
ret = file_vopen(filep, path, oflags, 0, ap);
va_end(ap);
if (ret >= OK)
{
atomic_fetch_add(&filep->f_refs, 1);
}
return ret;
}