<feed xmlns='http://www.w3.org/2005/Atom'>
<title>accel-ppp.git, branch master</title>
<subtitle>High performance PPTP/L2TP/SSTP/PPPoE/IPoE server for Linux (mirror of https://github.com/accel-ppp/accel-ppp.git)
</subtitle>
<id>https://git.amelek.net/accel-ppp/accel-ppp.git/atom?h=master</id>
<link rel='self' href='https://git.amelek.net/accel-ppp/accel-ppp.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/'/>
<updated>2026-07-13T22:09:13+00:00</updated>
<entry>
<title>Merge pull request #333 from nuclearcat/triton-reload-race</title>
<updated>2026-07-13T22:09:13+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-13T22:09:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=425f68fc0ac8df24d43d97cf1348f148b83ac89d'/>
<id>urn:sha1:425f68fc0ac8df24d43d97cf1348f148b83ac89d</id>
<content type='text'>
triton: reject concurrent config reload requests</content>
</entry>
<entry>
<title>Merge pull request #325 from nuclearcat/cli-ipv6-fixes</title>
<updated>2026-07-13T22:08:54+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-13T22:08:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=894e2ff1d3cdc310d1075dd813ffa3d993cd4709'/>
<id>urn:sha1:894e2ff1d3cdc310d1075dd813ffa3d993cd4709</id>
<content type='text'>
cli: proper ipv6 support for cli interface</content>
</entry>
<entry>
<title>Merge pull request #337 from nuclearcat/fix-ipv6-ifid</title>
<updated>2026-07-13T22:07:23+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-13T22:07:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=3ab711d7b2f48ce05825e568239a6f172e42f079'/>
<id>urn:sha1:3ab711d7b2f48ce05825e568239a6f172e42f079</id>
<content type='text'>
Fix ipv6 ifid and UB shift</content>
</entry>
<entry>
<title>ipdb: fix undefined shift in build_ip6_addr() host-bits mask</title>
<updated>2026-07-12T20:12:03+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-12T20:12:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=efa4cea1beec1fa758ac94f350dfa7bdfa6d472f'/>
<id>urn:sha1:efa4cea1beec1fa758ac94f350dfa7bdfa6d472f</id>
<content type='text'>
For prefix lengths 65..127 the mask for the host bits was built with
(1 &lt;&lt; (128 - prefix_len)) - 1 using a plain int literal, which is
undefined behavior for shift counts of 31 and above, i.e. for any
prefix length from 65 to 97. Use a 64-bit constant for the shift.
</content>
</entry>
<entry>
<title>ipv6cp: fix byte order of default interface-id values</title>
<updated>2026-07-12T20:11:39+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-12T20:11:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=1c43c26d5c87df722141ad6a37f068968a9a6b5b'/>
<id>urn:sha1:1c43c26d5c87df722141ad6a37f068968a9a6b5b</id>
<content type='text'>
The default fixed interface-ids conf_intf_id_val=1 and
conf_peer_intf_id_val=2 were plain host-order integers, while every
consumer (build_ip6_addr(), ifcfg.c, nd.c, dhcpv6.c) treats intf_id as
an opaque 8-byte value in network byte order and copies it verbatim
into the low 64 bits of the IPv6 address. parse_intfid() also produces
network byte order, so only the built-in defaults were affected.

On little-endian hosts this produced fe80::100:0:0:0 (and ::200:0:0:0
for the peer) instead of the intended fe80::1 / ::2 whenever
ipv6-intf-id / ipv6-peer-intf-id were not set in the config.

Store the defaults with htobe64() so the resulting addresses are ::1
and ::2 regardless of host endianness. The assignment is done in
init() because htobe64() is not a constant expression on all libcs.

Note: on little-endian deployments this changes the server link-local
address from fe80::100:0:0:0 to fe80::1 when ipv6-intf-id is unset.
</content>
</entry>
<entry>
<title>triton: reject concurrent config reload requests</title>
<updated>2026-07-07T23:53:26+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-07T22:57:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=844812959beb1a6bbcc64099a4f85b3db127a8a4'/>
<id>urn:sha1:844812959beb1a6bbcc64099a4f85b3db127a8a4</id>
<content type='text'>
triton_conf_reload() kept the notify callback in a single global slot,
and the CLI reload command likewise stored its wakeup context in a
global. A second reload issued while the first was still pending (from
another CLI connection or SIGUSR1) overwrote both, so only the last
requester was notified when the reload completed; the earlier CLI
context slept forever in triton_context_schedule() and that connection
hung while the rest of the daemon kept running.

Make triton_conf_reload() return -1 when a reload is already pending,
checked atomically under threads_lock, and pass a caller-provided arg
through to the notify callback so each requester keeps its own state
instead of sharing globals. The CLI reload's request struct is
heap-allocated rather than kept on reload_exec's stack, since
triton_context_schedule() can migrate a suspended context onto a
different worker thread's stack before the notify callback runs,
which would otherwise leave conf_reload_notify() writing through a
stale stack pointer.

Also mark the reload as running (need_config_reload = 2) before
dropping threads_lock to call __config_reload(). Previously a worker
woken during the reload (e.g. by the notify callback waking the CLI
context, or any stray context wakeup) could loop through the idle
path, decrement the active count back to zero and re-enter
__config_reload() while need_config_reload was still set, running a
second concurrent conf_reload() and invoking the notify callback
twice - corrupting the wakeup list and, with the CLI's heap request,
writing through freed memory.

The SIGUSR1 handler used to call triton_conf_reload() directly from
signal context, taking spinlocks and potentially running the whole
config parse inside the handler. It now only sets a flag; the main
thread waits with sigtimedwait() and performs the reload (and logs a
warning when one is already in progress) from normal thread context.
The CLI now replies "reload is already in progress" instead of losing
the first requester's wakeup.
</content>
</entry>
<entry>
<title>Merge pull request #327 from nuclearcat/mac-filter-uaf-fix</title>
<updated>2026-07-06T10:36:46+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-06T10:36:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=f4014a4a2c9e654646faeb81cd9ac5841b1c9b0f'/>
<id>urn:sha1:f4014a4a2c9e654646faeb81cd9ac5841b1c9b0f</id>
<content type='text'>
pppoe: fix use-after-free in mac_filter_load()</content>
</entry>
<entry>
<title>Merge pull request #326 from nuclearcat/ipv6-disable-fix</title>
<updated>2026-07-06T10:05:57+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-06T10:05:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=6db993d970dff69fe73672d2ad64df9f39b498fc'/>
<id>urn:sha1:6db993d970dff69fe73672d2ad64df9f39b498fc</id>
<content type='text'>
ipoe: Fix OOPS if ipv6.disable=1</content>
</entry>
<entry>
<title>pppoe: fix use-after-free in mac_filter_load()</title>
<updated>2026-07-06T08:28:53+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-06T08:28:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=2ba4437b88dc54ebc5dea6ba1c2007b9cd4aa0e0'/>
<id>urn:sha1:2ba4437b88dc54ebc5dea6ba1c2007b9cd4aa0e0</id>
<content type='text'>
When a mac-filter file line contained an octet &gt; 255, the error path freed
the entry but kept writing to it and linked it into mac_list. Validate all
octets before allocating so invalid lines are skipped entirely.

This is not considered a security vulnerability: the mac-filter file can
only be configured by an administrator with access to the daemon config,
or the CLI, both of which require privileged access.

Fixes #307

Signed-off-by: Denys Fedoryshchenko &lt;denys.f@collabora.com&gt;
</content>
</entry>
<entry>
<title>ipoe: Fix OOPS if ipv6.disable=1</title>
<updated>2026-07-06T08:07:00+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-06T08:04:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=6930d048efe7be06cd36e7413914be0bec4a45b5'/>
<id>urn:sha1:6930d048efe7be06cd36e7413914be0bec4a45b5</id>
<content type='text'>
ipoe_recv() handles every ETH_P_IPV6 frame arriving on an IPoE
by calling ipoe_lookup_rt6()/ip6_route_output().
On ipv6.disable=1 IPv6 FIB is not initialized.
We can detect that by ipv6_mod_enabled() since kernel 4.8,
and return RX_HANDLER_PASS, so packet falls thru normal stack and get discarded.

Fixes: https://github.com/accel-ppp/accel-ppp/issues/313

Signed-off-by: Denys Fedoryshchenko &lt;denys.f@collabora.com&gt;
</content>
</entry>
</feed>
