summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/ipoe/ipoe.c
AgeCommit message (Collapse)Author
2026-07-07ipoe: fix username string leak on early session teardownDenys Fedoryshchenko
The ipoe-level ses->username always holds an allocated string (_strdup of ifname/calling-station-id, u_inet_ntoa buffer or lua result), but ipoe_session_free() never released it. Ownership is normally transferred in auth_result() via ap_session_set_username(), so the string was leaked whenever a session died before auth_result() ran: termination while starting, PWDB_WAIT never completing, or ipoe_create_interface() failure. The create-interface failure path also leaked the freshly allocated local copy outright, since it returned before the string was stored anywhere. Store the string in ses->username as soon as it is obtained and free it in ipoe_session_free(). auth_result() clears ses->username before handing ownership to ap_session_set_username(), so no double free is possible. Reported-by: Louis Scalbert (#101)
2026-07-07ipoe: fix dhcpv4 relay reply packet leakDenys Fedoryshchenko
dhcpv4_relay_read() takes a reference on the reply packet for every registered listener context and hands it over via triton_context_call(). The receiving ipoe_ses_recv_dhcpv4_relay() consumes that reference by storing the packet in ses->dhcpv4_relay_reply, but the early-return branch taken when the original request is already gone dropped the reference without freeing the packet. This leaks one packet every time a relay reply races with the request being released, which happens regularly on busy relay-mode deployments. Reported-by: Louis Scalbert (#101)
2026-05-21strip: Fix invalid parsingDenys Fedoryshchenko
strip() memmove count was one short, dropping the NULL terminator; dpado_parse error path leaked already-parsed range entries. Also affects ipoe. Since strip is identical in both, we can place fixed common function in utils. Reported-by: Khedor <khedor@gmail.com> Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
2026-05-04session: encapsulate statistics countersDenys Fedoryshchenko
Group the core session starting, active, and finishing statistics behind the private ap_session_stat storage in session.c instead of exposing writable counters through ap_session.h. This keeps ownership inside the session core while preserving the existing CLI and ACCEL-PPP-MIB counter semantics. Route session counter updates through ap_session_stat_*() helpers. Session start, activation, termination, finish, and shutdown-idle paths no longer open-code individual counter increments/decrements; the update policy now lives beside the session-owned storage and uses relaxed atomic operations for the simple state counters. Make the CLI show-stat path render from a local snapshot and convert the PPP SNMP starting/active/finishing scalars from watched raw pointers to scalar handlers. PPP controllers now read max-session limits through ap_session_stat_starting() and ap_session_stat_active(), removing external direct access to ap_session_stat. Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
2026-05-04ipoe: encapsulate statistics countersDenys Fedoryshchenko
Group the IPOE starting, active, and delayed offer statistics in struct ipoe_stat_t and keep the storage private to ipoe.c instead of exposing writable stat_* globals. This keeps ownership inside the IPOE control code while preserving the existing CLI and ACCEL-PPP-MIB counter semantics. Route counter updates through ipoe_stat_*() helpers. Session setup, activation, teardown, and delayed offer queue paths no longer open-code individual counter increments/decrements; the update policy now lives beside the IPOE-owned storage and uses relaxed atomic operations for the simple state counters. Make the CLI show-stat path render from a local snapshot and convert the IPOE SNMP starting/active scalars from watched raw pointers to scalar handlers. SNMP now reads through ipoe_stat_starting() and ipoe_stat_active(), removing the old ipoe_get_stat() pointer escape hatch. Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
2026-02-22Update header includes in ipoe.cmarekm72
Replaced Linux-specific headers with their net counterparts.
2026-01-30netlink: Added VRF supportAndrii Melnychenko
Added VRF support to the iproute routines. Updated iproute* calls in the ipoe, radius, and dhcpv6 code. Signed-off-by: Andrii Melnychenko <a.melnychenko@vyos.io>
2025-08-19ci: add tests execution with asan and ubsanSergey V. Lobanov
2025-08-07ipoe: dhcp: Fix username for noauth sessionDmitriy Eshenko
2024-10-26Merge pull request #185 from svlobanov/pcre2-1Denys Fedoryshchenko
migrate from pcre to pcre2
2024-09-02migrate from pcre to pcre2Sergey V. Lobanov
PCRE is not supported anymore and removed from several distros
2024-08-27build: fix compile errors on GCC 14Sergey V. Lobanov
This patch fixes compile errors on GCC 14 like the following /root/accel-ppp/accel-pppd/radius/packet.c: In function 'rad_packet_recv': /root/accel-ppp/accel-pppd/radius/packet.c:142:72: error: passing argument 5 of 'recvfrom' from incompatible pointer type [-Wincompatible-pointer-types] 142 | n = recvfrom(fd, pack->buf, REQ_LENGTH_MAX, 0, addr, &addr_len); | ^~~~ | | | struct sockaddr_in * In file included from /usr/include/netinet/in.h:10, from /usr/include/arpa/inet.h:9, from /root/accel-ppp/accel-pppd/radius/packet.c:10: /usr/include/sys/socket.h:397:55: note: expected 'struct sockaddr * restrict' but argument is of type 'struct sockaddr_in *' Reference: https://gcc.gnu.org/gcc-14/porting_to.html
2024-04-10musl: Add musl compatibilityDenys Fedoryshchenko
Thanks for hints Alpine Linux project and their patches: https://git.alpinelinux.org/aports/tree/community/accel-ppp?h=master We can adjust a bit code and cmake config files to make accel-ppp buildable under musl "as is". Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
2023-12-17ipoe: Add per-interface check-mac-change optionDmitriy Eshenko
2023-11-30vlan_mon: ipoe: pppoe: Add disable vlan timeout featureDmitriy Eshenko
Co-authored-by: Peter Adam <p.adam@cygnusnetworks.de>
2023-06-27ipoe: fix memory access violation with unset link-selectionLouis Scalbert
Link-selection pointer is not set to NULL when link-selection IPOE option is not set. It results in a memory access violation in dhcpv4_packet_insert_opt82() Set link-selection pointer to NULL if unset to fix the issue. Fixes: 61e31c591e ("ipoe: add dhcp link selection sub-option") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-06-05ipoe: add dhcp link selection sub-optionPhilippe Guibert
Add the support of DHCP option 82 "Agent Information" sub-option 5 "link selection". The IPv4 value can be specified in the [ipoe] "link-selection" configuration option. Link: https://www.rfc-editor.org/rfc/rfc3527.html Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2021-12-28T22: connection limit for non-shared interfaces by interface indexroot
2021-09-08ipoe: check for local-net in arp requestsDmitry Kozlov
2021-08-26fixed race condition when manipulating serv->timerDmitry Kozlov
2021-03-23ipoe: recover common check-ip opt processingVladislav Grishenko
2021-03-20ipoe: fix NULL checkVladislav Grishenko
2021-03-13Fix some errors and warnings found by cppcheck[anp/hsw]
[accel-pppd/ctrl/ipoe/ipoe.c:4054]: (style) A pointer can not be negative so it is either pointless or an error to check if it is not. [accel-pppd/logs/log_syslog.c:148]: (error) Array 'facility_name[9]' accessed at index 35, which is out of bounds. [accel-pppd/lua/session.c:274]: (error) Common realloc mistake: 'mods' nulled but not freed upon failure [accel-pppd/extra/ippool.c:114]: (warning) %u in format string (no. 1) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:114]: (warning) %u in format string (no. 2) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:114]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:114]: (warning) %u in format string (no. 4) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:114]: (warning) %u in format string (no. 5) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:141]: (warning) %u in format string (no. 1) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:141]: (warning) %u in format string (no. 2) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:141]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:141]: (warning) %u in format string (no. 4) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/extra/ippool.c:141]: (warning) %u in format string (no. 5) requires 'unsigned int *' but the argument type is 'int *'. [accel-pppd/main.c:97]: (warning) %d in format string (no. 1) requires 'int *' but the argument type is 'unsigned int *'. [accel-pppd/radius/radius.c:687] -> [accel-pppd/radius/radius.c:690]: (warning) Possible null pointer dereference: rpd - otherwise it is redundant to check it against null. [accel-pppd/radius/serv.c:805] -> [accel-pppd/radius/serv.c:829]: (warning) Possible null pointer dereference: ptr2 - otherwise it is redundant to check it against null. [accel-pppd/radius/serv.c:813] -> [accel-pppd/radius/serv.c:829]: (warning) Possible null pointer dereference: ptr2 - otherwise it is redundant to check it against null. [accel-pppd/radius/serv.c:823] -> [accel-pppd/radius/serv.c:829]: (warning) Possible null pointer dereference: ptr2 - otherwise it is redundant to check it against null.
2020-12-19ipoe: added option 56 to DHCP NAK packetDmitry Kozlov
2020-06-08ipoe: gracefuly terminate denied sessionsVladislav Grishenko
2020-04-30ipoe: dhcp: add rebind-time supportVladislav Grishenko
2020-03-07session: add global [common]max-starting optionVladislav Grishenko
usually there's no need to have per-proto limitation, since the need of max starting limitation affects the whole server, not particular protocol only.
2020-03-07Revert "ipoe,pptp: introduced max-starting option (limit number of starting ↵Vladislav Grishenko
sessions)" This reverts commit 02008c74a19c538ff7d9ce643c8cd4c738886196.
2020-01-11ipv6pool: add per-proto ipv6-pool and ipv6-pool-delegate optionsVladislav Grishenko
also, disable ipv6 pools via chap-secrets, need to find another syntax for it, may be with comments.
2019-09-11ipoe: check for ipoe_create_session_dhcpv4 returns not NULLDmitry Kozlov
2019-09-04ipoe,pptp: introduced max-starting option (limit number of starting sessions)Gavrilenkov A
2019-08-29ppp/ipoe: cleanup cleck-ip supportVladislav Grishenko
let check-ip setting from [ppp]/[ipoe] sections has prio over [common] for compatibility with older configs.
2019-08-20Prepared check-ip and for ipoe, migrate to [common]check-ipDmitriyEshenko
2019-05-13ipoe: restored max-lease-time functionalityDmitry Kozlov
2019-05-13Revert "ipoe: restored max-lease-time functionality"Dmitry Kozlov
This reverts commit 6f433706a152ea987899fd830ff399e257b0f2a6.
2019-05-13Merge branch 'master' of github.com:xebd/accel-pppDmitry Kozlov
2019-05-13ipoe: restored max-lease-time functionalityDmitry Kozlov
2019-05-09ipoe: Fix send NAK for REQUEST with 3 same XID for not existing sessionsDmitriyEshenko
2019-01-27ipoe: fix start=up not work if set not per-interfaceDmitriyEshenko
2019-01-23ipoe: log invalid start values and fix dist configVladislav Grishenko
2019-01-19ipoe/cli: fix build warningsVladislav Grishenko
2018-12-20ipoe: stricter route deletionGuillaume Nault
Rework the conditionals to make __ipoe_session_activate() and ipoe_session_finished() follow the same logic: * Drop the second '!serv->opt_ifcfg' test in __ipoe_session_activate(), which is is already checked by the parent conditional. * Invert the order of the tests in ipoe_session_finished(), so that it uses the same conditions as __ipoe_session_activate(). Finally, set the 'src' parameter in iproute_del(), so that we can be sure that the deleted route matches the one added by __ipoe_session_activate(). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-12-20iputils: add 'src' and 'gw' parameters to iproute_del()Guillaume Nault
Rework iproute_del() to have the same parameters as iproute_add(). This will allow callers to specify more precisely the route they want to delete. Callers will later be converted to make use of these parameters to ensure that the removed route precisely matches the one that was originaly inserted. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-06-08ipoe: use vendor option for attr_dhcp_opt82_xxx tooDmitry Kozlov
2018-05-31ipoe: use lua function to generate username for UP sessions tooDmitry Kozlov
2018-05-28ipoe: do not bring interface down on session termination in shared=0 modeDmitry Kozlov
2018-05-25ipoe: introduced ip-unnumbered per-interface optionDmitry Kozlov
2018-05-25ipoe: do not remove address on session finish if ifcfg=1Dmitry Kozlov
2018-05-25ipoe: small fix for previous commitDmitry Kozlov
2018-05-25ipoe: improved mac change detectionDmitry Kozlov