From 52a531f7d10bf4f4a80ac9224d2a5a2bffb87d8d Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Wed, 8 Nov 2023 16:54:40 +1100 Subject: [PATCH] pppoe: Fail if ethernet interface name is too long If the name of the ethernet interface is longer than can fit in the relevant structure used for system calls, generate an error rather than using a truncated interface name. Signed-off-by: Paul Mackerras --- pppd/plugins/pppoe/if.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pppd/plugins/pppoe/if.c b/pppd/plugins/pppoe/if.c index 4b13ecc..d5a4624 100644 --- a/pppd/plugins/pppoe/if.c +++ b/pppd/plugins/pppoe/if.c @@ -99,6 +99,7 @@ openInterface(char const *ifname, UINT16_t type, unsigned char *hwaddr) int fd; struct ifreq ifr; int domain, stype; + size_t maxlen; #ifdef HAVE_STRUCT_SOCKADDR_LL struct sockaddr_ll sa; @@ -111,11 +112,18 @@ openInterface(char const *ifname, UINT16_t type, unsigned char *hwaddr) #ifdef HAVE_STRUCT_SOCKADDR_LL domain = PF_PACKET; stype = SOCK_RAW; + maxlen = IFNAMSIZ; #else domain = PF_INET; stype = SOCK_PACKET; + maxlen = sizeof(sa.sa_data); #endif + if (strlen(ifname) >= maxlen) { + error("Can't use interface %.16s: name is too long", ifname); + return -1; + } + if ((fd = socket(domain, stype, htons(type))) < 0) { /* Give a more helpful message for the common error case */ if (errno == EPERM) { -- 2.39.2