InfiniTimeOrg / InfiniTimeOrg/InfiniTime
Potential thread stack overflow in SystemTask::Process
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 3.4k
- Forks
- 1.1k
- PR merge metrics
- No merged PRs in 30d
Description
Issue details
While some detailed build configuration, There are potential stack overflow in thread function named SystemTask::Process
In this line, SystemTask::Process Allows 1400(350*4) stack size.
However, after checking the stack using our internally developed tool, it might have 1432 Bytes in with some detailed configurations.
Steps to produce
1. In CMakeLists.txt , Add this line:
add_compile_options(
$<$<COMPILE_LANGUAGE:C>:-fstack-usage>
$<$<COMPILE_LANGUAGE:CXX>:-fstack-usage>
)
This will help you automatically calculating stack size of each function.
2. Build InfiniTime normally, using this configurations:
make pinetime-app
Now we can get stack usage file (*.su) for each source file, So we can manually check stack size of each function.
In case of SystemTask::Process :
There are large call stack with this flow:
Pinetime::System::SystemTask::Process (_ZN8Pinetime6System10SystemTask7ProcessEPv) => 8 bytes
Pinetime::System::SystemTask::Work (_ZN8Pinetime6System10SystemTask4WorkEv) => 64 bytes
Pinetime::Controllers::NimbleController::Init(_ZN8Pinetime11Controllers16NimbleController4InitEv) => 24 bytes
Pinetime::Controllers::NimbleController::RestoreBond(_ZN8Pinetime11Controllers16NimbleController11RestoreBondEv) => 272 bytes
Pinetime::Controllers::FS::FileDelete(_ZN8Pinetime11Controllers2FS10FileDeleteEPKc) => 0 bytes
lfs_remove(lfs_remove) => 120 bytes
lfs_fs_forceconsistency(lfs_fs_forceconsistency) => 144 bytes
lfs_dir_drop(lfs_dir_drop) => 24 bytes
lfs_dir_commit(lfs_dir_commit) => 168 bytes
lfs_dir_compact(lfs_dir_compact) => 160 bytes
lfs_dir_split(lfs_dir_split) => 88 bytes
lfs_dir_alloc(lfs_dir_alloc) => 32 bytes
lfs_alloc(lfs_alloc) => 24 bytes
lfs_fs_rawtraverse(lfs_fs_rawtraverse) => 104 bytes
lfs_dir_fetch(lfs_dir_fetch) => 24 bytes
lfs_dir_fetchmatch(lfs_dir_fetchmatch) => 112 bytes
lfs_bd_read(lfs_bd_read) => 64 bytes
SUM => 1432 bytes
So, there are potentially occur stack overflow in SystemTask::Process Thread function.
Environment
Version
Commit https://github.com/InfiniTimeOrg/InfiniTime/commit/7128fc045db083c7014166872b50b536942c06e0
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with src/systemtask/SystemTask.cpp at the linked SystemTask::Process location and the CMakeLists.txt stack-usage options. Build with make pinetime-app, inspect the generated .su files, and trace the reported Process-to-littlefs call path. Done means determining whether the 1432-byte path exceeds the thread stack and addressing or documenting the result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp
- Domain
- embedded-iot, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100