Skip to content
Snippets Groups Projects
  1. Apr 04, 2023
    • Rob Swindell's avatar
      Fix double-free race condition with SBBSCTRL upon global recycle · 28fa44ed
      Rob Swindell authored
      When multiple servers are recycling at the same time, (e.g. due to saved
      change in SCFG) they'd each call sbbs_read_ini() with a shared global_startup
      struct, which in turn calls sbbs_free_ini(), which would free all the
      allocated network interface lists (including the global_startup one) using
      iniFreeStringList (just a wrapper for strListFree), but iniFreeStringList()
      does NOT modify (NULLify) the freed-pointer, so your second or third server
      that called sbbs_read_ini(), with the shared MainForm->global structure, would
      *again* free the same global interface list. This bug actually has always
      existed because get_ini_globals() freed the global interface list in the same
      way, except it *immediately* re-allocated a new one by calling
      iniGetStringList(), so the time window (opportunity) for this race condition
      to occur was much smaller. Truly, SBBSCTRL should use a mutex or other
      mechanism to protect the shared global_startup struct, but this is a first
      step to a full fix: sbbs_free_ini() should (and now does) nullify the freed
      network interface pointers by using strListFree() directly. I haven't been
      able to reproduce the crash upon recycle in SBBSCTRL after making this change.
      28fa44ed
    • Rob Swindell's avatar
      d96968bb
    • Rob Swindell's avatar
  2. Apr 03, 2023
  3. Apr 02, 2023
  4. Apr 01, 2023
  5. Mar 31, 2023
  6. Mar 29, 2023
Loading