--- net-tools-20181103_0eebece/lib/interface.c.orig	2019-07-22 20:31:05.000000000 +0200
+++ net-tools-20181103_0eebece/lib/interface.c	2026-06-16 16:46:13.324696508 +0200
@@ -210,8 +210,17 @@
     return err;
 }
 
-static const char *get_name(char *name, const char *p)
+static const char *get_name(char *name, size_t size, const char *p)
 {
+    /*
+     * This is only called once from if_readlist_proc() and the size
+     * to be passed should always be IFNAMSIZ.
+     */	
+    if(size-- <= 0) abort();
+
+    /* last octet of if name is always NUL */ 
+    name[size] = '\0';
+
     while (isspace(*p))
 	p++;
     while (*p) {
@@ -223,8 +232,15 @@
 		if (*p == ':') {
 			/* Yes it is, backup and copy it. */
 			p = dot;
+			/*
+			 * Overflow happens when /proc contains garbage
+			 * instead of valid kernel data, no reason to
+			 * continue execution then.
+			 */
+		        if(size-- <= 0) abort();
 			*name++ = *p++;
 			while (*p && isdigit(*p)) {
+				if(size-- <= 0) abort();
 				*name++ = *p++;
 			}
 		} else {
@@ -234,9 +250,10 @@
 	    p++;
 	    break;
 	}
+	if(size-- <= 0) abort();
 	*name++ = *p++;
     }
-    *name++ = '\0';
+    *name = '\0';
     return p;
 }
 
@@ -361,7 +378,7 @@
     while (fgets(buf, sizeof buf, fh)) {
 	const char *s;
 	char name[IFNAMSIZ];
-	s = get_name(name, buf);
+	s = get_name(name, sizeof name, buf);
 	ife = if_cache_add(name);
 	get_dev_fields(s, ife);
 	ife->statistics_valid = 1;
