From: Paul Mackerras Date: Wed, 8 Nov 2023 05:54:40 +0000 (+1100) Subject: pppoe: Fail if ethernet interface name is too long X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=commitdiff_plain;h=52a531f7d10bf4f4a80ac9224d2a5a2bffb87d8d 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 --- 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) {