Find a file
MrBrownieCGN df6a77bc0e amf,mme: defer admin purge to event queue + add MME event-id alignment guard
Two follow-ups to the admin-endpoints series, addressing concerns that
surfaced in pre-submission review:

1. Defer the ?purge=true cleanup off the SBI handler stack frame.

   The MME and AMF admin handlers previously called mme_ue_remove() /
   amf_ue_remove() inline after sending the 204 response. Open5GS
   schedules cross-event references via pool ids rather than raw
   pointers, so this is not a textbook use-after-free, but it does
   break the convention that every other state-removing trigger
   in these NFs (T3412/T3512 expiry, S6a/UDM Cancel, ordinary
   detach/deregistration) follows: state teardown happens in the
   main event loop, not from inside an inbound message handler.

   This commit adds two new event types --
   MME_EVENT_ADMIN_UE_PURGE and AMF_EVENT_ADMIN_UE_PURGE -- and posts
   them onto ogs_app()->queue right after the 204 has been put on the
   wire. The respective state_operational() handler re-resolves the
   pool id via mme_ue_find_by_id() / amf_ue_find_by_id() and silently
   no-ops if the context disappeared in the meantime, then calls the
   normal _remove() path from a clean stack frame.

   This isolates the heavy cleanup (timer cancellation, child-list
   teardown, pool free) from any state the SBI handler still holds
   on its stack, and matches the dispatch convention reviewers
   expect from cleanup paths in the project.

2. Compile-time alignment guard for the MME event header.

   mme-init.c reads ((ogs_event_t *)e)->id before the FSM dispatch
   to divert OGS_EVENT_SBI_SERVER events to the synchronous admin
   handler. That cast is well-defined only because both ogs_event_t
   and mme_event_t place int id at offset 0 -- a convention
   maintained today by manual care. Adding
   OGS_STATIC_ASSERT(offsetof(mme_event_t, id) ==
   offsetof(ogs_event_t, id)) turns the convention into a build-time
   check so any future reordering of mme_event_t breaks the build
   instead of silently corrupting the diversion logic.

   AMF does not need an equivalent assert because amf_event_t embeds
   ogs_event_t as its first member (`ogs_event_t h;`); the cast is
   trivially well-defined there.

Signed-off-by: MrBrownieCGN <daniel.brune.so@outlook.com>
2026-05-02 20:39:43 +02:00
.github Update cifuzz 2025-02-04 21:09:20 +09:00
configs [HR] Implement handling of UE-initiated PDU Session Modification (#2194) 2025-06-30 10:07:06 +09:00
debian Release v2.7.7 2026-03-15 20:53:34 +09:00
docker docker: remove deprecated version from docker-compose.yml 2026-02-08 11:55:34 +09:00
docs docs: added featured community projects 2026-04-14 08:49:23 +09:00
lib lib/sbi: Fix unsafe memory handling in access_handler() 2026-04-06 17:42:59 +09:00
misc Add roaming type toggle via command line (#4211) 2025-12-23 13:53:53 +09:00
src amf,mme: defer admin purge to event queue + add MME event-id alignment guard 2026-05-02 20:39:43 +02:00
subprojects Tested on FreeBSD-14.1-STABLE (#3350) 2024-08-03 21:45:52 +09:00
tests amf/ngap: use ogs_warn for missing RAN UE context 2026-03-15 20:09:43 +09:00
vagrant Tested on FreeBSD-14.1-STABLE (#3350) 2024-08-03 21:45:52 +09:00
webui Release v2.7.7 2026-03-15 20:53:34 +09:00
.clang-tidy [MISC] Add support for static code analysis 2022-07-01 21:38:47 +09:00
.dockerignore [build] Use local sources to build applications (#1583) 2022-06-19 18:18:09 +09:00
.editorconfig editorconfig: new file (#2746) 2023-11-27 22:21:35 +09:00
.gitignore .gitignore: Add install/ dir 2023-10-10 08:03:25 +09:00
LICENSE Change LICENSE to GNU AGPL v3.0 2017-12-18 10:35:54 +09:00
meson.build Release v2.7.7 2026-03-15 20:53:34 +09:00
meson_options.txt [Fuzzing] oss-fuzz support for fuzzing (#2283) 2023-05-05 17:20:11 +09:00
README.md nrf: Fix serving PLMN counter reset on NF register 2026-02-04 20:51:29 +09:00

Open5GS logo

Getting Started

Please follow the documentation at open5gs.org!

Sponsors

If you find Open5GS useful for work, please consider supporting this Open Source project by Becoming a sponsor. To manage the funding transactions transparently, you can donate through OpenCollective.

sponsors

Community

  • Problem with Open5GS can be filed as issues in this repository.
  • Other topics related to this project are happening on the discussions.
  • Voice and text chat are available in Open5GS's Discord workspace. Use this link to get started.

Contributing

If you're contributing through a pull request to Open5GS project on GitHub, please read the Contributor License Agreement in advance.

License

Support

Technical support and customized services for Open5GS are provided by NewPlane at support@newplane.io.