Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Potential thread stack overflow in SystemTask::Process

Aperta
#2,407 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
cmake, cpp

Direzione di ricerca

Inizia da src/systemtask/SystemTask.cpp nella posizione collegata di SystemTask::Process e dalle opzioni di utilizzo dello stack in CMakeLists.txt. Compila con make pinetime-app, esamina i file .su generati e traccia il percorso di chiamata segnalato da Process a littlefs. Il lavoro è completato quando si determina se il percorso di 1432 byte supera lo stack del thread e si affronta o si documenta il risultato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Issue details

While some detailed build configuration, There are potential stack overflow in thread function named SystemTask::Process

https://github.com/InfiniTimeOrg/InfiniTime/blob/0fabfe99d9115c5e258a14fd0c985d300ee41f2d/src/systemtask/SystemTask.cpp#L90

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

Lingua principale
C
Stelle
3.4k
Fork
1.1k
Merge medio
23h 18m
PR unite (30g)
1

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di InfiniTimeOrg/InfiniTime

Tutte le issue di InfiniTimeOrg/InfiniTime

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.