<feed xmlns='http://www.w3.org/2005/Atom'>
<title>accel-ppp.git/accel-pppd/ipv6/nd.c, branch sstp-alloc-invariant</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=sstp-alloc-invariant</id>
<link rel='self' href='https://git.amelek.net/accel-ppp/accel-ppp.git/atom?h=sstp-alloc-invariant'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/'/>
<updated>2026-07-06T22:41:01+00:00</updated>
<entry>
<title>ipv6: fix NULL deref and OOB read in dnssl/AFTR-Name config parsing</title>
<updated>2026-07-06T22:41:01+00:00</updated>
<author>
<name>Denys Fedoryshchenko</name>
<email>denys.f@collabora.com</email>
</author>
<published>2026-07-06T22:38:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=d8273ebd5232f038a4775fe2ad55203a8be11a57'/>
<id>urn:sha1:d8273ebd5232f038a4775fe2ad55203a8be11a57</id>
<content type='text'>
add_dnssl() in nd.c and dhcpv6.c, and its copy add_aftr_gw() in
dhcpv6.c, call strlen(val) before the "if (!val)" guard, so a dnssl
option without a value crashes on config load before the check is
ever reached (also reported by cppcheck: "Either the condition '!val'
is redundant or there is possible null pointer dereference").

Moving strlen() after the guard is not enough: an empty value such as
a bare "dnssl=" or "aftr-gw=" passes the NULL check with n == 0 and
the following "val[n - 1]" reads one byte before the string.

Reject both NULL and empty values before taking the length.

Note these functions are only reached from the config parser (the
[ipv6-dns] section and the ipv6-dhcp "aftr-gw" option) at startup or
on config reload; nothing from received packets flows into them. So
this is a robustness fix for invalid/malformed configuration files
(local DoS at worst), not a remotely triggerable issue.

The NULL-check ordering in add_dnssl() was originally fixed by
[anp/hsw] in PR #13; this extends it to empty values and to the same
pattern in add_aftr_gw().

Co-authored-by: [anp/hsw] &lt;sysop@880.ru&gt;
</content>
</entry>
<entry>
<title>ipv6_nd: fix ipv6 auto-configuration in netns</title>
<updated>2022-06-22T14:55:48+00:00</updated>
<author>
<name>Telire Barry</name>
<email>t.barry@alphalink.fr</email>
</author>
<published>2022-06-22T14:55:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=671c54b1876b2b46a37cc587a114a2b5cf9ed2d0'/>
<id>urn:sha1:671c54b1876b2b46a37cc587a114a2b5cf9ed2d0</id>
<content type='text'>
ipv6 auto-configuration generate error  when link is
terminated inside netns. The error message is :
"ipv6_nd: setsockopt(SO_BINDTODEVICE): No such device"

This error is generated because socket is not created inside
the netns but it’s created in the default netns.
This fix allow to create the socket in the right place.

to propose this fix, i was inspired by :
issue : https://phabricator.accel-ppp.org/T68
commit : https://github.com/accel-ppp/accel-ppp/commit/f1d616d91914be493b6a32a96323fa871733f8e0
</content>
</entry>
<entry>
<title>Fixed some errors found by valgrind and pvs-studio (#11)</title>
<updated>2021-03-20T14:14:59+00:00</updated>
<author>
<name>[anp/hsw]</name>
<email>sysop@880.ru</email>
</author>
<published>2021-03-20T14:14:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=62f7740033f05053a581e864742575a46ccc6da2'/>
<id>urn:sha1:62f7740033f05053a581e864742575a46ccc6da2</id>
<content type='text'>
* Fix errors found by valgrind

==12312== Syscall param sendmsg(msg.msg_iov[0]) points to uninitialised byte(s)
==12312==    at 0x486CCF0: sendmsg (in /lib/libpthread-2.22.so)
==12312==    by 0x12F57F: rtnl_talk (libnetlink.c:316)
==12312==    by 0x132DA3: genl_resolve_mcg (genl.c:52)
==12312==    by 0x484E1CB: init (vlan_mon.c:528)
==12312==    by 0x484CDC0: vlan_mon_register_proto (vlan_mon.c:48)
==12312==    by 0x510B763: load_vlan_mon (pppoe.c:1914)
==12312==    by 0x510BFF2: load_config (pppoe.c:2064)
==12312==    by 0x510C22A: pppoe_init (pppoe.c:2108)
==12312==    by 0x483E9EB: triton_load_modules (triton.c:704)
==12312==    by 0x1384B2: main (main.c:339)
==12312==  Address 0xbedacdd8 is on thread 1's stack
==12312==  in frame #2, created by genl_resolve_mcg (genl.c:23)

==12312== 15 bytes in 1 blocks are definitely lost in loss record 352 of 836
==12312==    at 0x482A9A9: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12312==    by 0x4B97524: strdup (in /lib/libc-2.22.so)
==12312==    by 0x12C30C: init (telnet.c:769)
==12312==    by 0x483E9EB: triton_load_modules (triton.c:704)
==12312==    by 0x1384B2: main (main.c:339)
==12312==
==12312== 15 bytes in 1 blocks are definitely lost in loss record 353 of 836
==12312==    at 0x482A9A9: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12312==    by 0x4B97524: strdup (in /lib/libc-2.22.so)
==12312==    by 0x12D60A: init (tcp.c:392)
==12312==    by 0x483E9EB: triton_load_modules (triton.c:704)
==12312==    by 0x1384B2: main (main.c:339)

* Fix another warnings by cppcheck

[accel-pppd/ctrl/ipoe/arp.c:256]: (error) Uninitialized variable: n
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 5) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 6) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 5) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 6) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 5) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 6) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/pppoe.c:738]: (warning) Possible null pointer dereference
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'int *'.
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/libnetlink/libnetlink.c:515]: (warning) Possible null pointer dereference
[accel-pppd/ppp/ipv6cp_opt_intfid.c:185]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.

* Suppress compiler warnings

* Fix locking errors

/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       279     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 279, 249.
/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       333     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 333, 315.
/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       422     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 422, 372.
/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       488     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 488, 468.
/opt/pvs/accel-ppp/accel-pppd/triton/mempool.c  119     warn    V1020 The function exited without calling the 'pthread_spin_unlock' function. Check lines: 119, 116.

* Fix array len errors

/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        75      warn    V557 Array underrun is possible. The value of 'len - 1' index could reach -1.
/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        76      warn    V557 Array underrun is possible. The value of '-- len' index could reach -1.

* Fix possible memory leaks

/opt/pvs/accel-ppp/accel-pppd/radius/radius.c   936     err     V773 The function was exited without releasing the 'str' pointer. A memory leak is possible.
/opt/pvs/accel-ppp/accel-pppd/radius/serv.c     622     err     V773 The function was exited without releasing the 'str' pointer. A memory leak is possible.
/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        144     err     V773 The function was exited without releasing the 'raw' pointer. A memory leak is possible.

* Fix unsafe code

/opt/pvs/accel-ppp/accel-pppd/cli/tcp.c 364     warn    V1004 The 'host' pointer was used unsafely after it was verified against nullptr. Check lines: 338, 364.
/opt/pvs/accel-ppp/accel-pppd/cli/telnet.c      701     warn    V1004 The 'host' pointer was used unsafely after it was verified against nullptr. Check lines: 675, 701.
/opt/pvs/accel-ppp/accel-pppd/extra/ippool.c    241     err     V614 Potentially uninitialized pointer 'pos' used.
/opt/pvs/accel-ppp/accel-pppd/radius/dict.c     165     err     V614 Uninitialized pointer 'parent_items' used.

* Remove duplicate code

/opt/pvs/accel-ppp/accel-pppd/radius/serv.c     202     warn    V547 Expression 'ts.tv_sec &lt; req-&gt;serv-&gt;fail_time' is always false.

* Fix treating signed bool variables as unsigned

* Add nullptr checking

/opt/pvs/accel-ppp/accel-pppd/ipv6/dhcpv6.c     886     err     V595 The 'opt-&gt;val' pointer was utilized before it was verified against nullptr. Check lines: 886, 890.
/opt/pvs/accel-ppp/accel-pppd/ipv6/nd.c 479     err     V595 The 'opt-&gt;val' pointer was utilized before it was verified against nullptr. Check lines: 479, 483.
/opt/pvs/accel-ppp/accel-pppd/radius/auth.c     152     err     V595 The 'rpd-&gt;auth_ctx' pointer was utilized before it was verified against nullptr. Check lines: 152, 154.
/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        114     err     V595 The 'cur_sect' pointer was utilized before it was verified against nullptr. Check lines: 114, 117.

* Add logging of exit conditions

* Clarify calculation

[accel-pppd/ppp/ccp_mppe.c:281]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:282]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:283]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:284]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:285]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:286]: (style) Clarify calculation precedence for '&amp;' and '?'.
[drivers/ipoe/ipoe.c:307]: (style) Clarify calculation precedence for '&amp;' and '?'.

* Fix void calculations

[accel-pppd/ctrl/pppoe/disc.c:211]: (portability) 'pkt' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/ctrl/pptp/pptp.c:150]: (portability) 'buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/acct.c:37]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/auth.c:35]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/auth.c:79]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:43]: (portability) 'pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:47]: (portability) 'pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:57]: (portability) 'pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:65]: (portability) 'req.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:97]: (portability) 'req.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/serv.c:364]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/triton/mempool.c:115]: (portability) 'mmap_ptr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/triton/mempool.c:122]: (portability) 'mmap_ptr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/triton/mempool.c:276]: (portability) 'ptr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.

* Fix void part 2

[accel-pppd/ipv6/dhcpv6.c:844]: (portability) 'conf_dnssl' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/ipv6/nd.c:199]: (portability) '(void*)dnsslinfo' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/ipv6/nd.c:432]: (portability) 'conf_dnssl' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.

* Fix null pointer dereference

[accel-pppd/ctrl/ipoe/ipoe.c:2048]: (warning) Possible null pointer dereference: eth
[accel-pppd/ctrl/ipoe/ipoe.c:2049]: (warning) Possible null pointer dereference: iph

* Remove redundant check

/opt/pvs/accel-ppp/accel-pppd/ctrl/l2tp/packet.c        656     warn    V547 Expression 'attr-&gt;length &lt;= 16' is always false.

* PR fixes

* PR fixes 2</content>
</entry>
<entry>
<title>ipv6, shaper: fix possible NULL-pointer dereference</title>
<updated>2021-03-20T13:25:15+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2021-03-20T13:25:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=5c6cf3e627b95a76ccdd21b956a9e77f05f250d9'/>
<id>urn:sha1:5c6cf3e627b95a76ccdd21b956a9e77f05f250d9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipv6: consolidate and fix interface-id address generation for non-/128</title>
<updated>2018-01-12T21:07:50+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2018-01-12T17:24:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=933595c17e2a665315a9742ccd2ddeea6dafb78f'/>
<id>urn:sha1:933595c17e2a665315a9742ccd2ddeea6dafb78f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipv6: use macro for unspecified address ckecking</title>
<updated>2018-01-12T21:07:45+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2018-01-11T21:54:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=2bec9805e11d591fb638908f78d82e7f62463a51'/>
<id>urn:sha1:2bec9805e11d591fb638908f78d82e7f62463a51</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipv6: ignore "unspecified address" (::/128)</title>
<updated>2017-12-29T11:26:38+00:00</updated>
<author>
<name>Dmitry Kozlov</name>
<email>xeb@mail.ru</email>
</author>
<published>2017-12-29T11:26:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=bff66de7a08a6c62d263efc4fd2ef151094c83b7'/>
<id>urn:sha1:bff66de7a08a6c62d263efc4fd2ef151094c83b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ipv6: implemented special handling of /128 prefixes</title>
<updated>2017-12-25T14:57:53+00:00</updated>
<author>
<name>Dmitry Kozlov</name>
<email>xeb@mail.ru</email>
</author>
<published>2017-12-25T14:57:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=4c8340c4abe04d896de8e0a190ec412d4ce4f30f'/>
<id>urn:sha1:4c8340c4abe04d896de8e0a190ec412d4ce4f30f</id>
<content type='text'>
If prefix length is 128 then send RA with 64 prefix length and add point-to-point ipv6 address on interface
</content>
</entry>
<entry>
<title>ipv6: nd: add non-/64 prefixes support</title>
<updated>2017-12-04T21:17:13+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2016-05-12T17:20:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=504b093a9878e758af1397aa82eda44b1bf0f608'/>
<id>urn:sha1:504b093a9878e758af1397aa82eda44b1bf0f608</id>
<content type='text'>
 non-/64 subnets still needs Router Advertimenets for the
 default route &amp; RDNSS.
</content>
</entry>
<entry>
<title>ipv6: nd: add AdvOnLinkFlag option support</title>
<updated>2017-12-04T19:22:42+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2016-05-12T16:17:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/accel-ppp/accel-ppp.git/commit/?id=7fc3d1044d3a46903dac0acd96b4e1c50602b309'/>
<id>urn:sha1:7fc3d1044d3a46903dac0acd96b4e1c50602b309</id>
<content type='text'>
</content>
</entry>
</feed>
