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/?a=commitdiff_plain;ds=sidebyside;h=52a531f7d10bf4f4a80ac9224d2a5a2bffb87d8d;p=ppp.git 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) {