mirror of
https://github.com/openwrt/openwrt.git
synced 2026-10-13 21:58:06 +04:00
Free the per-port segment strings on unregister to avoid leaking them across device rebind. Drop the dead (phys < 0) check and guard the kstrdup allocation against failure. Move swconfig_create_led_trigger() before list_add_tail() in register_switch so a failing registration never publishes the device on the global swdevs list with dangling portmap/portbuf pointers (a use-after-free for any swdevs iterator). Route both the LED trigger failure and the -ENFILE (swdev id exhaustion) failure paths through a shared cleanup that frees portbuf, portmap, and the per-port segment strings instead of leaking them. Reorder the frees in unregister_switch to run after list_del so the buffers are not freed while the device is still reachable from swdevs. Signed-off-by: Rosen Penev <rosenp@gmail.com> Link: https://github.com/openwrt/openwrt/pull/24246 Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>