<feed xmlns='http://www.w3.org/2005/Atom'>
<title>accel-ppp.git/accel-pppd/ctrl/ipoe/dhcpv4_options.c, branch 1.15.0</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=1.15.0</id>
<link rel='self' href='https://git.amelek.net/accel-ppp/accel-ppp.git/atom?h=1.15.0'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/'/>
<updated>2026-09-01T05:55:54+00:00</updated>
<entry>
<title>ipoe: harden DHCPv4 option decoding</title>
<updated>2026-09-01T05:55:54+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-09-01T05:49:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=3bbf61a373290d63382a4d1bfa8712566eb31c7b'/>
<id>urn:sha1:3bbf61a373290d63382a4d1bfa8712566eb31c7b</id>
<content type='text'>
Validate known options before extracting fields, bound Relay-Agent and classless-route subformats, and replace unaligned DHCP option accesses in notification, relay, and session paths.
</content>
</entry>
<entry>
<title>ipoe: bounds check classless routes and avoid unaligned reads</title>
<updated>2026-08-10T05:44:13+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-10T05:44:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=4600e779e801b51405ed51d421ecfe8e33e5059d'/>
<id>urn:sha1:4600e779e801b51405ed51d421ecfe8e33e5059d</id>
<content type='text'>
The destination was always read as a 32 bit word regardless of how many
significant octets the prefix length implies, and the gateway was read
without checking that four bytes remain in the option. Neither read was
bounded by the end of the option, so a client could make the decoder run
past it. dhcpv4_check_options() only enforces a minimum length of 5 for
option 121, which is short of the 9 bytes a /32 route needs.

Reading the destination as a word was also wrong for any prefix shorter
than /32, as it pulled in the first octets of the gateway: 10.0.1.0/24
via 1.1.1.1 printed as 10.0.0.1/24.

Read only the significant octets, check the remaining length before both
reads, and copy the gateway rather than dereferencing a possibly
unaligned pointer.
</content>
</entry>
<entry>
<title>ipoe: fix netmask computation for classless routes</title>
<updated>2026-08-10T05:43:17+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-08-10T05:43:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=0dd152a83012764a77ef2a7ae7bf7c20c3d43c35'/>
<id>urn:sha1:0dd152a83012764a77ef2a7ae7bf7c20c3d43c35</id>
<content type='text'>
The netmask was built with a loop shifting 1 into place, which was wrong
in three ways. At i == 0 it evaluated 1 &lt;&lt; 32, undefined for a 32 bit
int, and at i == 1 it shifted into the sign bit of a signed value. The
shift amount was off by one, so a /24 produced 0xfffffe00 rather than
0xffffff00. And mask1 was initialized once before the loop over the
routes and only ever OR'ed into, so the mask of every route accumulated
into the routes that followed it.

A well formed option carrying 10.0.1.0/24 via 1.1.1.1 and 172.16.0.0/12
via 2.2.2.2 printed as 10.0.0.1/24 and 172.16.2.0/12.

Compute the mask directly instead, and reject a prefix length above 32
rather than shifting by a negative amount.
</content>
</entry>
<entry>
<title>ci: add tests execution with asan and ubsan</title>
<updated>2025-08-19T18:59:40+00:00</updated>
<author>
<name>Sergey V. Lobanov</name>
<email>sergey@lobanov.in</email>
</author>
<published>2025-08-19T12:39:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=c1529bcf0f788ee61097a818fff3a8e27d473e61'/>
<id>urn:sha1:c1529bcf0f788ee61097a818fff3a8e27d473e61</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipoe: fixed DHCP option 42 (ntp servers)</title>
<updated>2025-01-22T13:52:30+00:00</updated>
<author>
<name>aapostoliuk</name>
<email>a.apostoliuk@vyos.io</email>
</author>
<published>2025-01-21T17:47:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=df1d09799a10885c23ad0760b3d1b6ac96cd10d7'/>
<id>urn:sha1:df1d09799a10885c23ad0760b3d1b6ac96cd10d7</id>
<content type='text'>
Allowed using multiple NTP servers in DHCP option 42
</content>
</entry>
<entry>
<title>remove trailing whitespaces</title>
<updated>2014-11-22T05:56:40+00:00</updated>
<author>
<name>Dmitry Kozlov</name>
<email>xeb@mail.ru</email>
</author>
<published>2014-11-22T05:56:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=81ca3923a29ea9b67f7291be23b210019546aa5f'/>
<id>urn:sha1:81ca3923a29ea9b67f7291be23b210019546aa5f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipoe: various fixes</title>
<updated>2013-01-26T12:40:53+00:00</updated>
<author>
<name>Kozlov Dmitry</name>
<email>xeb@mail.ru</email>
</author>
<published>2013-01-26T12:40:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=0ca38d8e1246716c8b53bc3191c5cccf9f228251'/>
<id>urn:sha1:0ca38d8e1246716c8b53bc3191c5cccf9f228251</id>
<content type='text'>
</content>
</entry>
<entry>
<title>initial ipoe implementation</title>
<updated>2012-06-22T14:11:19+00:00</updated>
<author>
<name>Kozlov Dmitry</name>
<email>xeb@mail.ru</email>
</author>
<published>2012-06-22T14:11:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=4080b4e1ffdb1482ab26557eb46a8121d93ac584'/>
<id>urn:sha1:4080b4e1ffdb1482ab26557eb46a8121d93ac584</id>
<content type='text'>
</content>
</entry>
</feed>
