diff --git a/config/rootfiles/common/ppp b/config/rootfiles/common/ppp
index fe2d0d244..0a8170179 100644
--- a/config/rootfiles/common/ppp
+++ b/config/rootfiles/common/ppp
@@ -38,27 +38,29 @@ etc/ppp/standardloginscript
 #usr/include/pppd/upap.h
 #usr/lib/pkgconfig/pppd.pc
 usr/lib/pppd
-usr/lib/pppd/2.5.2
-#usr/lib/pppd/2.5.2/minconn.la
-usr/lib/pppd/2.5.2/minconn.so
-#usr/lib/pppd/2.5.2/openl2tp.la
-usr/lib/pppd/2.5.2/openl2tp.so
-#usr/lib/pppd/2.5.2/passwordfd.la
-usr/lib/pppd/2.5.2/passwordfd.so
-#usr/lib/pppd/2.5.2/pppoatm.la
-usr/lib/pppd/2.5.2/pppoatm.so
-#usr/lib/pppd/2.5.2/pppoe.la
-usr/lib/pppd/2.5.2/pppoe.so
-#usr/lib/pppd/2.5.2/pppol2tp.la
-usr/lib/pppd/2.5.2/pppol2tp.so
-#usr/lib/pppd/2.5.2/radattr.la
-usr/lib/pppd/2.5.2/radattr.so
-#usr/lib/pppd/2.5.2/radius.la
-usr/lib/pppd/2.5.2/radius.so
-#usr/lib/pppd/2.5.2/radrealms.la
-usr/lib/pppd/2.5.2/radrealms.so
-#usr/lib/pppd/2.5.2/winbind.la
-usr/lib/pppd/2.5.2/winbind.so
+usr/lib/pppd/2.5.5
+#usr/lib/pppd/2.5.5/dhcpv6relay.la
+usr/lib/pppd/2.5.5/dhcpv6relay.so
+#usr/lib/pppd/2.5.5/minconn.la
+usr/lib/pppd/2.5.5/minconn.so
+#usr/lib/pppd/2.5.5/openl2tp.la
+usr/lib/pppd/2.5.5/openl2tp.so
+#usr/lib/pppd/2.5.5/passwordfd.la
+usr/lib/pppd/2.5.5/passwordfd.so
+#usr/lib/pppd/2.5.5/pppoatm.la
+usr/lib/pppd/2.5.5/pppoatm.so
+#usr/lib/pppd/2.5.5/pppoe.la
+usr/lib/pppd/2.5.5/pppoe.so
+#usr/lib/pppd/2.5.5/pppol2tp.la
+usr/lib/pppd/2.5.5/pppol2tp.so
+#usr/lib/pppd/2.5.5/radattr.la
+usr/lib/pppd/2.5.5/radattr.so
+#usr/lib/pppd/2.5.5/radius.la
+usr/lib/pppd/2.5.5/radius.so
+#usr/lib/pppd/2.5.5/radrealms.la
+usr/lib/pppd/2.5.5/radrealms.so
+#usr/lib/pppd/2.5.5/winbind.la
+usr/lib/pppd/2.5.5/winbind.so
 usr/sbin/chat
 usr/sbin/pppd
 usr/sbin/pppdump
diff --git a/lfs/ppp b/lfs/ppp
index b0f7c66b2..eedfa3fbf 100644
--- a/lfs/ppp
+++ b/lfs/ppp
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2025  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2026  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.5.2
+VER        = 2.5.5
 
 # Download source file from https://download.samba.org/pub/ppp/
 
@@ -45,7 +45,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = 5a79bfaf23c2f1cba7b2c4e8f27e6033aa7ee6e119b4d96dfd2870f91524052fe9ed16149e5f76cf93370159f491af828b4103eb04bd4f5dbbecca4a08af9d0d
+$(DL_FILE)_BLAKE2 = 2983bf73c0ac65599f4b21e802d1f7be68a004d60008f470a1f5acef3b5fdd3be8bacffb28eb75c9399695f9657398c2d8366acc20f9d5c9b7566f97b6f2ee64
 
 install : $(TARGET)
 
@@ -76,11 +76,11 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
 	cd $(DIR_APP) && autoreconf -vfi
-	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.1-1-we-don-t-want-to-accidentally-leak-fds.patch
-	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.1-2-everywhere-O_CLOEXEC-harder.patch
-	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.1-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
-	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.1-4-increase-max-padi-attempts.patch
-	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.1-5-headers_4.9.patch
+	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.5-1-we-don-t-want-to-accidentally-leak-fds.patch
+	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.5-2-everywhere-O_CLOEXEC-harder.patch
+	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.5-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
+	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.5-4-increase-max-padi-attempts.patch
+	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/ppp/ppp-2.5.5-5-headers.patch
 	cd $(DIR_APP) && ./configure \
 					--prefix=/usr \
 					--sysconfdir=/etc \
diff --git a/src/patches/ppp/ppp-2.5.1-1-we-don-t-want-to-accidentally-leak-fds.patch b/src/patches/ppp/ppp-2.5.5-1-we-don-t-want-to-accidentally-leak-fds.patch
similarity index 65%
rename from src/patches/ppp/ppp-2.5.1-1-we-don-t-want-to-accidentally-leak-fds.patch
rename to src/patches/ppp/ppp-2.5.5-1-we-don-t-want-to-accidentally-leak-fds.patch
index d755b89c3..cdbf9943e 100644
--- a/src/patches/ppp/ppp-2.5.1-1-we-don-t-want-to-accidentally-leak-fds.patch
+++ b/src/patches/ppp/ppp-2.5.5-1-we-don-t-want-to-accidentally-leak-fds.patch
@@ -1,16 +1,16 @@
 diff -Naur pppd.orig/auth.c pppd/auth.c
---- pppd.orig/auth.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/auth.c	2024-10-07 16:12:09.202924555 +0200
+--- pppd.orig/auth.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/auth.c	2026-11-12 11:09:41.239609356 +0100
 @@ -529,7 +529,7 @@
          free(fname);
  	return 0;
      }
 -    ufile = fopen(fname, "r");
 +    ufile = fopen(fname, "re");
+     check_res = ufile && ppp_check_access(fileno(ufile), fname, PPP_FT_SECRET);
      if (seteuid(euid) == -1)
  	fatal("unable to regain privileges: %m");
-     if (ufile == NULL) {
-@@ -1552,7 +1552,7 @@
+@@ -1549,7 +1549,7 @@
      filename = path_upapfile;
      addrs = opts = NULL;
      ret = UPAP_AUTHNAK;
@@ -19,16 +19,16 @@ diff -Naur pppd.orig/auth.c pppd/auth.c
      if (f == NULL) {
  	error("Can't open PAP password file %s: %m", filename);
  
-@@ -1652,7 +1652,7 @@
-     if (ret <= 0) {
+@@ -1657,7 +1657,7 @@
+ 
  	filename = path_upapfile;
  	addrs = NULL;
 -	f = fopen(filename, "r");
 +	f = fopen(filename, "re");
  	if (f == NULL)
  	    return 0;
- 	check_access(f, filename);
-@@ -1698,7 +1698,7 @@
+ 	fd = fileno(f);
+@@ -1707,7 +1707,7 @@
      }
  
      filename = path_upapfile;
@@ -36,8 +36,8 @@ diff -Naur pppd.orig/auth.c pppd/auth.c
 +    f = fopen(filename, "re");
      if (f == NULL)
  	return 0;
-     check_access(f, filename);
-@@ -1735,7 +1735,7 @@
+     if (!ppp_check_access(fileno(f), filename, PPP_FT_SECRET)) {
+@@ -1747,7 +1747,7 @@
      }
  
      filename = path_upapfile;
@@ -46,7 +46,7 @@ diff -Naur pppd.orig/auth.c pppd/auth.c
      if (f == NULL)
  	return 0;
  
-@@ -1777,7 +1777,7 @@
+@@ -1793,7 +1793,7 @@
      }
  
      filename = path_chapfile;
@@ -55,16 +55,7 @@ diff -Naur pppd.orig/auth.c pppd/auth.c
      if (f == NULL)
  	return 0;
  
-@@ -1815,7 +1815,7 @@
-     struct wordlist *addrs;
- 
-     filename = PPP_PATH_SRPFILE;
--    f = fopen(filename, "r");
-+    f = fopen(filename, "re");
-     if (f == NULL)
- 	return 0;
- 
-@@ -1866,7 +1866,7 @@
+@@ -1852,7 +1852,7 @@
  	addrs = NULL;
  	secbuf[0] = 0;
  
@@ -73,34 +64,25 @@ diff -Naur pppd.orig/auth.c pppd/auth.c
  	if (f == NULL) {
  	    error("Can't open chap secret file %s: %m", filename);
  	    return 0;
-@@ -1919,7 +1919,7 @@
- 	filename = PPP_PATH_SRPFILE;
- 	addrs = NULL;
+@@ -2229,7 +2229,7 @@
+ 		int fd;
  
--	fp = fopen(filename, "r");
-+	fp = fopen(filename, "re");
- 	if (fp == NULL) {
- 	    error("Can't open srp secret file %s: %m", filename);
- 	    return 0;
-@@ -2309,7 +2309,7 @@
- 	     */
- 	    if (word[0] == '@' && word[1] == '/') {
  		strlcpy(atfile, word+1, sizeof(atfile));
 -		if ((sf = fopen(atfile, "r")) == NULL) {
 +		if ((sf = fopen(atfile, "re")) == NULL) {
  		    warn("can't open indirect secret file %s", atfile);
  		    continue;
  		}
-@@ -2479,7 +2479,7 @@
+@@ -2406,7 +2406,7 @@
      char pkfile[MAXWORDLEN];
  
      filename = PPP_PATH_EAPTLSSERVFILE;
 -    f = fopen(filename, "r");
 +    f = fopen(filename, "re");
      if (f == NULL)
- 		return 0;
+ 	return 0;
  
-@@ -2536,7 +2536,7 @@
+@@ -2466,7 +2466,7 @@
  		return 1;
  
      filename = PPP_PATH_EAPTLSCLIFILE;
@@ -109,19 +91,19 @@ diff -Naur pppd.orig/auth.c pppd/auth.c
      if (f == NULL)
  		return 0;
  
-@@ -2756,7 +2756,7 @@
+@@ -2692,7 +2692,7 @@
  		filename = (am_server ? PPP_PATH_EAPTLSSERVFILE : PPP_PATH_EAPTLSCLIFILE);
  		addrs = NULL;
  
 -		fp = fopen(filename, "r");
 +		fp = fopen(filename, "re");
- 		if (fp == NULL)
- 		{
+ 		if (fp == NULL) {
  			error("Can't open eap-tls secret file %s: %m", filename);
+ 			return 0;
 diff -Naur pppd.orig/options.c pppd/options.c
---- pppd.orig/options.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/options.c	2024-10-07 16:12:40.217129032 +0200
-@@ -572,7 +572,7 @@
+--- pppd.orig/options.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/options.c	2026-11-12 11:10:25.907467723 +0100
+@@ -607,7 +607,7 @@
  	ppp_option_error("unable to drop privileges to open %s: %m", filename);
  	return 0;
      }
@@ -131,9 +113,9 @@ diff -Naur pppd.orig/options.c pppd/options.c
      if (check_prot && seteuid(euid) == -1)
  	fatal("unable to regain privileges");
 diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
---- pppd.orig/sys-linux.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/sys-linux.c	2024-10-07 16:13:35.002001250 +0200
-@@ -1970,7 +1970,7 @@
+--- pppd.orig/sys-linux.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/sys-linux.c	2026-11-12 11:11:38.918864877 +0100
+@@ -2070,7 +2070,7 @@
  	/* Default the mount location of /proc */
  	strlcpy (proc_path, "/proc", sizeof(proc_path));
  	proc_path_len = 5;
@@ -142,7 +124,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	if (fp != NULL) {
  	    while ((mntent = getmntent(fp)) != NULL) {
  		if (strcmp(mntent->mnt_type, MNTTYPE_IGNORE) == 0)
-@@ -2030,7 +2030,7 @@
+@@ -2130,7 +2130,7 @@
      close_route_table();
  
      path = path_to_procfs("/net/route");
@@ -151,12 +133,3 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
      if (route_fd == NULL) {
  	error("can't open routing table %s: %m", path);
  	return 0;
-@@ -2330,7 +2330,7 @@
-     close_route_table();
- 
-     path = path_to_procfs("/net/ipv6_route");
--    route_fd = fopen (path, "r");
-+    route_fd = fopen (path, "re");
-     if (route_fd == NULL) {
- 	error("can't open routing table %s: %m", path);
- 	return 0;
diff --git a/src/patches/ppp/ppp-2.5.1-2-everywhere-O_CLOEXEC-harder.patch b/src/patches/ppp/ppp-2.5.5-2-everywhere-O_CLOEXEC-harder.patch
similarity index 79%
rename from src/patches/ppp/ppp-2.5.1-2-everywhere-O_CLOEXEC-harder.patch
rename to src/patches/ppp/ppp-2.5.5-2-everywhere-O_CLOEXEC-harder.patch
index 72102b74d..dde1ccddd 100644
--- a/src/patches/ppp/ppp-2.5.1-2-everywhere-O_CLOEXEC-harder.patch
+++ b/src/patches/ppp/ppp-2.5.5-2-everywhere-O_CLOEXEC-harder.patch
@@ -1,19 +1,7 @@
-diff -Naur pppd.orig/eap.c pppd/eap.c
---- pppd.orig/eap.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/eap.c	2024-10-07 16:18:53.077603533 +0200
-@@ -1542,7 +1542,7 @@
- 
- 	if ((path = name_of_pn_file()) == NULL)
- 		return (-1);
--	fd = open(path, modebits, S_IRUSR | S_IWUSR);
-+	fd = open(path, modebits, S_IRUSR | S_IWUSR | O_CLOEXEC);
- 	err = errno;
- 	free(path);
- 	errno = err;
 diff -Naur pppd.orig/main.c pppd/main.c
---- pppd.orig/main.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/main.c	2024-10-07 16:19:34.702106298 +0200
-@@ -491,7 +491,7 @@
+--- pppd.orig/main.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/main.c	2026-11-12 11:19:25.172479688 +0100
+@@ -495,7 +495,7 @@
  	die(0);
  
      /* Make sure fds 0, 1, 2 are open to somewhere. */
@@ -23,9 +11,9 @@ diff -Naur pppd.orig/main.c pppd/main.c
  	fatal("Couldn't open %s: %m", PPP_DEVNULL);
      while (fd_devnull <= 2) {
 diff -Naur pppd.orig/options.c pppd/options.c
---- pppd.orig/options.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/options.c	2024-10-07 16:21:04.207954343 +0200
-@@ -1736,9 +1736,9 @@
+--- pppd.orig/options.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/options.c	2026-11-12 11:20:37.072336180 +0100
+@@ -1803,9 +1803,9 @@
  	ppp_option_error("unable to drop permissions to open %s: %m", *argv);
  	return 0;
      }
@@ -38,9 +26,9 @@ diff -Naur pppd.orig/options.c pppd/options.c
      if (!privileged_option && seteuid(euid) == -1)
  	fatal("unable to regain privileges: %m");
 diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
---- pppd.orig/sys-linux.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/sys-linux.c	2024-10-07 16:27:42.282472415 +0200
-@@ -656,7 +656,7 @@
+--- pppd.orig/sys-linux.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/sys-linux.c	2026-11-12 11:25:40.913760089 +0100
+@@ -647,7 +647,7 @@
  	    goto err;
  	}
  	dbglog("using channel %d", chindex);
@@ -49,7 +37,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	if (fd < 0) {
  	    error("Couldn't reopen /dev/ppp: %m");
  	    goto err;
-@@ -894,7 +894,7 @@
+@@ -974,7 +974,7 @@
  		dbglog("in make_ppp_unit, already had /dev/ppp open?");
  		close(ppp_dev_fd);
  	}
@@ -58,7 +46,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	if (ppp_dev_fd < 0)
  		fatal("Couldn't open /dev/ppp: %m");
  	flags = fcntl(ppp_dev_fd, F_GETFL);
-@@ -1015,7 +1015,7 @@
+@@ -1145,7 +1145,7 @@
  	if (!new_style_driver)
  		return -1;
  
@@ -67,7 +55,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	if (master_fd < 0)
  		fatal("Couldn't open /dev/ppp: %m");
  	if (ioctl(master_fd, PPPIOCATTACH, &ifnum) < 0) {
-@@ -2541,7 +2541,7 @@
+@@ -2529,7 +2529,7 @@
  	if (tune_kernel) {
  	    forw_path = path_to_procfs("/sys/net/ipv4/ip_forward");
  	    if (forw_path != 0) {
@@ -76,7 +64,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  		if (fd >= 0) {
  		    if (write(fd, "1", 1) != 1)
  			error("Couldn't enable IP forwarding: %m");
-@@ -2886,7 +2886,7 @@
+@@ -2905,7 +2905,7 @@
      sscanf(utsname.release, "%d.%d.%d", &osmaj, &osmin, &ospatch);
      kernel_version = KVERSION(osmaj, osmin, ospatch);
  
@@ -85,7 +73,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
      if (fd >= 0) {
  	new_style_driver = 1;
  
-@@ -3064,7 +3064,7 @@
+@@ -3083,7 +3083,7 @@
  #if __GLIBC__ >= 2
      updwtmp(_PATH_WTMP, &ut);
  #else
@@ -94,7 +82,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
      if (wtmp >= 0) {
  	flock(wtmp, LOCK_EX);
  
-@@ -3288,7 +3288,7 @@
+@@ -3307,7 +3307,7 @@
  	int fd;
  
  	path = path_to_procfs("/sys/net/ipv4/ip_dynaddr");
@@ -103,7 +91,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	    if (write(fd, "1", 1) != 1)
  		error("Couldn't enable dynamic IP addressing: %m");
  	    close(fd);
-@@ -3542,7 +3542,7 @@
+@@ -3561,7 +3561,7 @@
      /*
       * Try the unix98 way first.
       */
@@ -112,7 +100,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
      if (mfd >= 0) {
  	int ptn;
  	if (ioctl(mfd, TIOCGPTN, &ptn) >= 0) {
-@@ -3553,7 +3553,8 @@
+@@ -3572,7 +3572,8 @@
  	    if (ioctl(mfd, TIOCSPTLCK, &ptn) < 0)
  		warn("Couldn't unlock pty slave %s: %m", pty_name);
  #endif
@@ -122,7 +110,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	    {
  		warn("Couldn't open pty slave %s: %m", pty_name);
  		close(mfd);
-@@ -3567,10 +3568,10 @@
+@@ -3586,10 +3587,10 @@
  	for (i = 0; i < 64; ++i) {
  	    slprintf(pty_name, sizeof(pty_name), "/dev/pty%c%x",
  		     'p' + i / 16, i % 16);
@@ -136,8 +124,8 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  		    ret = fchown(sfd, uid, -1);
  		    if (ret != 0) {
 diff -Naur pppd.orig/tdb.c pppd/tdb.c
---- pppd.orig/tdb.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/tdb.c	2024-10-07 16:30:04.033122023 +0200
+--- pppd.orig/tdb.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/tdb.c	2026-11-12 11:26:23.065046016 +0100
 @@ -1276,7 +1276,7 @@
  	}
  
@@ -148,9 +136,9 @@ diff -Naur pppd.orig/tdb.c pppd/tdb.c
  			mkdir_recursive(PPP_PATH_VARRUN) == 0)
  			goto again;
 diff -Naur pppd.orig/tty.c pppd/tty.c
---- pppd.orig/tty.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/tty.c	2024-10-07 16:31:11.161674911 +0200
-@@ -621,7 +621,7 @@
+--- pppd.orig/tty.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/tty.c	2026-11-12 11:27:38.333269267 +0100
+@@ -617,7 +617,7 @@
  				ppp_set_status(EXIT_OPEN_FAILED);
  				goto errret;
  			}
@@ -159,7 +147,7 @@ diff -Naur pppd.orig/tty.c pppd/tty.c
  			err = errno;
  			if (prio < OPRIO_ROOT && seteuid(0) == -1)
  				fatal("Unable to regain privileges");
-@@ -775,7 +775,7 @@
+@@ -771,7 +771,7 @@
  	if (connector == NULL && modem && devnam[0] != 0) {
  		int i;
  		for (;;) {
@@ -169,9 +157,9 @@ diff -Naur pppd.orig/tty.c pppd/tty.c
  			if (errno != EINTR) {
  				error("Failed to reopen %s: %m", devnam);
 diff -Naur pppd.orig/utils.c pppd/utils.c
---- pppd.orig/utils.c	2024-09-18 06:30:31.000000000 +0200
-+++ pppd/utils.c	2024-10-07 16:32:37.780775463 +0200
-@@ -926,14 +926,14 @@
+--- pppd.orig/utils.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/utils.c	2026-11-12 11:28:57.716524818 +0100
+@@ -1034,14 +1034,14 @@
      slprintf(lock_file, sizeof(lock_file), "%s/LCK..%s", PPP_PATH_LOCKDIR, dev);
  #endif
  
@@ -188,7 +176,7 @@ diff -Naur pppd.orig/utils.c pppd/utils.c
  	if (fd < 0) {
  	    if (errno == ENOENT) /* This is just a timing problem. */
  		continue;
-@@ -1016,7 +1016,7 @@
+@@ -1124,7 +1124,7 @@
  
      if (lock_file[0] == 0)
  	return -1;
diff --git a/src/patches/ppp/ppp-2.5.1-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch b/src/patches/ppp/ppp-2.5.5-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
similarity index 76%
rename from src/patches/ppp/ppp-2.5.1-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
rename to src/patches/ppp/ppp-2.5.5-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
index cfd72e468..d8d82c14e 100644
--- a/src/patches/ppp/ppp-2.5.1-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
+++ b/src/patches/ppp/ppp-2.5.5-3-everywhere-use-SOCK_CLOEXEC-when-creating-socket.patch
@@ -1,6 +1,6 @@
 diff -Naur pppd.orig/plugins/pppoatm/pppoatm.c pppd/plugins/pppoatm/pppoatm.c
---- pppd.orig/plugins/pppoatm/pppoatm.c	2023-03-25 05:38:30.000000000 +0100
-+++ pppd/plugins/pppoatm/pppoatm.c	2023-06-30 13:21:33.397378347 +0200
+--- pppd.orig/plugins/pppoatm/pppoatm.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppoatm/pppoatm.c	2026-11-12 12:29:52.914103725 +0100
 @@ -146,7 +146,7 @@
  
  	if (!device_got_set)
@@ -11,11 +11,11 @@ diff -Naur pppd.orig/plugins/pppoatm/pppoatm.c pppd/plugins/pppoatm/pppoatm.c
  		fatal("failed to create socket: %m");
  	memset(&qos, 0, sizeof qos);
 diff -Naur pppd.orig/plugins/pppoe/if.c pppd/plugins/pppoe/if.c
---- pppd.orig/plugins/pppoe/if.c	2022-12-30 02:12:39.000000000 +0100
-+++ pppd/plugins/pppoe/if.c	2023-06-30 13:24:11.372183452 +0200
-@@ -116,7 +116,7 @@
-     stype = SOCK_PACKET;
- #endif
+--- pppd.orig/plugins/pppoe/if.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppoe/if.c	2026-11-12 12:30:40.688340967 +0100
+@@ -121,7 +121,7 @@
+ 	return -1;
+     }
  
 -    if ((fd = socket(domain, stype, htons(type))) < 0) {
 +    if ((fd = socket(domain, stype | SOCK_CLOEXEC, htons(type))) < 0) {
@@ -23,9 +23,9 @@ diff -Naur pppd.orig/plugins/pppoe/if.c pppd/plugins/pppoe/if.c
  	if (errno == EPERM) {
  	    fatal("Cannot create raw socket -- pppoe must be run as root.");
 diff -Naur pppd.orig/plugins/pppoe/plugin.c pppd/plugins/pppoe/plugin.c
---- pppd.orig/plugins/pppoe/plugin.c	2023-03-25 05:38:30.000000000 +0100
-+++ pppd/plugins/pppoe/plugin.c	2023-06-30 13:25:58.798782323 +0200
-@@ -155,7 +155,7 @@
+--- pppd.orig/plugins/pppoe/plugin.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppoe/plugin.c	2026-11-12 12:32:19.848885925 +0100
+@@ -150,7 +150,7 @@
      /* server equipment).                                                  */
      /* Opening this socket just before waitForPADS in the discovery()      */
      /* function would be more appropriate, but it would mess-up the code   */
@@ -34,7 +34,7 @@ diff -Naur pppd.orig/plugins/pppoe/plugin.c pppd/plugins/pppoe/plugin.c
      if (conn->sessionSocket < 0) {
  	error("Failed to create PPPoE socket: %m");
  	return -1;
-@@ -166,7 +166,7 @@
+@@ -161,7 +161,7 @@
      lcp_wantoptions[0].mru = conn->mru = conn->storedmru;
  
      /* Update maximum MRU */
@@ -43,7 +43,7 @@ diff -Naur pppd.orig/plugins/pppoe/plugin.c pppd/plugins/pppoe/plugin.c
      if (s < 0) {
  	error("Can't get MTU for %s: %m", conn->ifName);
  	goto errout;
-@@ -364,7 +364,7 @@
+@@ -366,7 +366,7 @@
      }
  
      /* Open a socket */
@@ -53,9 +53,9 @@ diff -Naur pppd.orig/plugins/pppoe/plugin.c pppd/plugins/pppoe/plugin.c
      }
  
 diff -Naur pppd.orig/plugins/pppol2tp/openl2tp.c pppd/plugins/pppol2tp/openl2tp.c
---- pppd.orig/plugins/pppol2tp/openl2tp.c	2023-03-10 02:50:41.000000000 +0100
-+++ pppd/plugins/pppol2tp/openl2tp.c	2023-06-30 13:22:30.055768865 +0200
-@@ -93,7 +93,7 @@
+--- pppd.orig/plugins/pppol2tp/openl2tp.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppol2tp/openl2tp.c	2026-11-12 12:32:57.130835623 +0100
+@@ -92,7 +92,7 @@
  	int result;
  
  	if (openl2tp_fd < 0) {
@@ -65,9 +65,9 @@ diff -Naur pppd.orig/plugins/pppol2tp/openl2tp.c pppd/plugins/pppol2tp/openl2tp.
  			error("openl2tp connection create: %m");
  			return -ENOTCONN;
 diff -Naur pppd.orig/plugins/pppol2tp/pppol2tp.c pppd/plugins/pppol2tp/pppol2tp.c
---- pppd.orig/plugins/pppol2tp/pppol2tp.c	2022-12-30 02:12:39.000000000 +0100
-+++ pppd/plugins/pppol2tp/pppol2tp.c	2023-06-30 13:23:13.493756755 +0200
-@@ -220,7 +220,7 @@
+--- pppd.orig/plugins/pppol2tp/pppol2tp.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppol2tp/pppol2tp.c	2026-11-12 12:33:36.408832408 +0100
+@@ -221,7 +221,7 @@
  		struct ifreq ifr;
  		int fd;
  
@@ -77,9 +77,9 @@ diff -Naur pppd.orig/plugins/pppol2tp/pppol2tp.c pppd/plugins/pppol2tp/pppol2tp.
  			memset (&ifr, '\0', sizeof (ifr));
  			ppp_get_ifname(ifr.ifr_name, sizeof(ifr.ifr_name));
 diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
---- pppd.orig/sys-linux.c	2023-06-30 13:11:25.715511251 +0200
-+++ pppd/sys-linux.c	2023-06-30 13:32:50.021272249 +0200
-@@ -499,12 +499,12 @@
+--- pppd.orig/sys-linux.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/sys-linux.c	2026-11-12 12:36:15.477835260 +0100
+@@ -483,12 +483,12 @@
  void sys_init(void)
  {
      /* Get an internet socket for doing socket ioctls. */
@@ -94,7 +94,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
      if (sock6_fd < 0)
  	sock6_fd = -errno;	/* save errno for later */
  #endif
-@@ -2675,7 +2675,7 @@
+@@ -2671,7 +2671,7 @@
  	struct ifreq ifreq;
  	int ret, sock_fd;
  
@@ -103,7 +103,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	if (sock_fd < 0)
  		return -1;
  	memset(&ifreq.ifr_hwaddr, 0, sizeof(struct sockaddr));
-@@ -2698,7 +2698,7 @@
+@@ -2694,7 +2694,7 @@
  	struct ifreq ifreq;
  	int ret, sock_fd;
  
@@ -112,7 +112,7 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	if (sock_fd < 0)
  		return -1;
  
-@@ -2915,7 +2915,7 @@
+@@ -2942,7 +2942,7 @@
  /*
   * Open a socket for doing the ioctl operations.
   */
@@ -122,9 +122,9 @@ diff -Naur pppd.orig/sys-linux.c pppd/sys-linux.c
  	return 0;
  
 diff -Naur pppd.orig/tty.c pppd/tty.c
---- pppd.orig/tty.c	2023-06-30 13:14:06.450418113 +0200
-+++ pppd/tty.c	2023-06-30 13:33:31.285858278 +0200
-@@ -942,7 +942,7 @@
+--- pppd.orig/tty.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/tty.c	2026-11-12 12:36:47.785642537 +0100
+@@ -938,7 +938,7 @@
      *sep = ':';
  
      /* get a socket and connect it to the other end */
diff --git a/src/patches/ppp/ppp-2.5.1-4-increase-max-padi-attempts.patch b/src/patches/ppp/ppp-2.5.5-4-increase-max-padi-attempts.patch
similarity index 64%
rename from src/patches/ppp/ppp-2.5.1-4-increase-max-padi-attempts.patch
rename to src/patches/ppp/ppp-2.5.5-4-increase-max-padi-attempts.patch
index 002b6066d..9c7013214 100644
--- a/src/patches/ppp/ppp-2.5.1-4-increase-max-padi-attempts.patch
+++ b/src/patches/ppp/ppp-2.5.5-4-increase-max-padi-attempts.patch
@@ -1,7 +1,7 @@
 diff -Naur pppd.orig/plugins/pppoe/pppoe.h pppd/plugins/pppoe/pppoe.h
---- pppd.orig/plugins/pppoe/pppoe.h	2022-12-30 02:12:39.000000000 +0100
-+++ pppd/plugins/pppoe/pppoe.h	2023-06-30 13:37:07.189078090 +0200
-@@ -143,7 +143,7 @@
+--- pppd.orig/plugins/pppoe/pppoe.h	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppoe/pppoe.h	2026-11-12 12:39:37.389855386 +0100
+@@ -141,7 +141,7 @@
  #define STATE_TERMINATED    4
  
  /* How many PADI/PADS attempts? */
diff --git a/src/patches/ppp/ppp-2.5.1-5-headers_4.9.patch b/src/patches/ppp/ppp-2.5.5-5-headers.patch
similarity index 60%
rename from src/patches/ppp/ppp-2.5.1-5-headers_4.9.patch
rename to src/patches/ppp/ppp-2.5.5-5-headers.patch
index dc6c22852..ebc978133 100644
--- a/src/patches/ppp/ppp-2.5.1-5-headers_4.9.patch
+++ b/src/patches/ppp/ppp-2.5.5-5-headers.patch
@@ -1,7 +1,7 @@
 diff -Naur pppd.orig/plugins/pppoe/plugin.c pppd/plugins/pppoe/plugin.c
---- pppd.orig/plugins/pppoe/plugin.c	2023-06-30 13:25:58.798782323 +0200
-+++ pppd/plugins/pppoe/plugin.c	2023-06-30 13:50:23.150026201 +0200
-@@ -46,6 +46,8 @@
+--- pppd.orig/plugins/pppoe/plugin.c	2026-10-31 00:02:07.000000000 +0100
++++ pppd/plugins/pppoe/plugin.c	2026-11-12 12:42:29.523097123 +0100
+@@ -43,6 +43,8 @@
  #include <signal.h>
  #include <net/if_arp.h>
  #include <linux/ppp_defs.h>
