From a5baf9de0b449750127abbf88a2082668590d503 Mon Sep 17 00:00:00 2001 From: dmiller Date: Thu, 20 Jun 2024 20:14:31 +0000 Subject: [PATCH] Consolidate device name checking in nse_dnet.cc --- nse_dnet.cc | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/nse_dnet.cc b/nse_dnet.cc index 73a323409..3514ac557 100644 --- a/nse_dnet.cc +++ b/nse_dnet.cc @@ -42,16 +42,31 @@ static int l_dnet_new (lua_State *L) lua_setmetatable(L, -2); udata->eth = NULL; udata->sock = -1; + udata->devname[0] = '\0'; return 1; } +static struct interface_info *checkdevname (lua_State *L, int idx) +{ + size_t len = 0; + const char *interface_name = luaL_checklstring(L, idx, &len); + if (len >= 32) { + luaL_argerror(L, idx, "device name too long"); + return NULL; + } + struct interface_info *ii = getInterfaceByName(interface_name, o.af()); + if (ii == NULL) + luaL_argerror(L, idx, "device %s not found or no address configured"); + + return ii; +} + static int l_dnet_get_interface_info (lua_State *L) { char ipstr[INET6_ADDRSTRLEN]; struct addr src, bcast; - struct interface_info *ii = getInterfaceByName(luaL_checkstring(L, 1), - o.af()); + struct interface_info *ii = checkdevname(L, 1); if (ii == NULL) return nseU_safeerror(L, "failed to find interface"); @@ -150,11 +165,7 @@ static eth_t *open_eth_cached (lua_State *L, int dnet_index, const char *device) static int ethernet_open (lua_State *L) { nse_dnet_udata *udata = (nse_dnet_udata *) nseU_checkudata(L, 1, DNET_METATABLE, "dnet"); - size_t len = 0; - const char *interface_name = luaL_checklstring(L, 2, &len); - if (len >= 32) - return luaL_argerror(L, 2, "device name too long"); - struct interface_info *ii = getInterfaceByName(interface_name, o.af()); + struct interface_info *ii = checkdevname(L, 2); if (ii == NULL || ii->device_type != devt_ethernet #ifdef WIN32 @@ -163,9 +174,9 @@ static int ethernet_open (lua_State *L) ) return luaL_argerror(L, 2, "device is not valid ethernet interface"); - udata->eth = open_eth_cached(L, 1, interface_name); - strncpy(udata->devname, interface_name, len); - udata->devname[len] = '\0'; + udata->eth = open_eth_cached(L, 1, ii->devfullname); + strncpy(udata->devname, ii->devfullname, 16); + udata->devname[16] = '\0'; if (o.scriptTrace()) { log_write(LOG_STDOUT, "%s: Ethernet open %s\n",