mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-17 22:58:22 +00:00
Improve code security posture by replacing sprintf with a safer function.
This commit is contained in:
@ -36,6 +36,7 @@
|
||||
#include "RuntimeEnvironment.hpp"
|
||||
#include "Utils.hpp"
|
||||
#include "Mutex.hpp"
|
||||
#include "Utils.hpp"
|
||||
|
||||
// ff:ff:ff:ff:ff:ff with no ADI
|
||||
static const ZeroTier::MulticastGroup _blindWildcardMulticastGroup(ZeroTier::MAC(0xff),0);
|
||||
@ -99,22 +100,22 @@ private:
|
||||
inline void _findCmd(int id,const char *name)
|
||||
{
|
||||
char tmp[4096];
|
||||
sprintf(tmp,"/sbin/%s",name);
|
||||
ZeroTier::Utils::snprintf(tmp,sizeof(tmp),"/sbin/%s",name);
|
||||
if (ZeroTier::Utils::fileExists(tmp)) {
|
||||
_paths[id] = tmp;
|
||||
return;
|
||||
}
|
||||
sprintf(tmp,"/usr/sbin/%s",name);
|
||||
ZeroTier::Utils::snprintf(tmp,sizeof(tmp),"/usr/sbin/%s",name);
|
||||
if (ZeroTier::Utils::fileExists(tmp)) {
|
||||
_paths[id] = tmp;
|
||||
return;
|
||||
}
|
||||
sprintf(tmp,"/bin/%s",name);
|
||||
ZeroTier::Utils::snprintf(tmp,sizeof(tmp),"/bin/%s",name);
|
||||
if (ZeroTier::Utils::fileExists(tmp)) {
|
||||
_paths[id] = tmp;
|
||||
return;
|
||||
}
|
||||
sprintf(tmp,"/usr/bin/%s",name);
|
||||
ZeroTier::Utils::snprintf(tmp,sizeof(tmp),"/usr/bin/%s",name);
|
||||
if (ZeroTier::Utils::fileExists(tmp)) {
|
||||
_paths[id] = tmp;
|
||||
return;
|
||||
@ -178,8 +179,8 @@ EthernetTap::EthernetTap(
|
||||
int devno = 0;
|
||||
struct stat sbuf;
|
||||
do {
|
||||
sprintf(ifr.ifr_name,"zt%d",devno++);
|
||||
sprintf(procpath,"/proc/sys/net/ipv4/conf/%s",ifr.ifr_name);
|
||||
Utils::snprintf(ifr.ifr_name,sizeof(ifr.ifr_name),"zt%d",devno++);
|
||||
Utils::snprintf(procpath,sizeof(procpath),"/proc/sys/net/ipv4/conf/%s",ifr.ifr_name);
|
||||
} while (stat(procpath,&sbuf) == 0);
|
||||
}
|
||||
|
||||
@ -292,12 +293,12 @@ EthernetTap::EthernetTap(
|
||||
|
||||
// Open the first available device (ones in use will fail with resource busy)
|
||||
for(int i=0;i<256;++i) {
|
||||
sprintf(devpath,"/dev/zt%d",i);
|
||||
Utils::snprintf(devpath,sizeof(devpath),"/dev/zt%d",i);
|
||||
if (stat(devpath,&tmp))
|
||||
throw std::runtime_error("no more TAP devices available");
|
||||
_fd = ::open(devpath,O_RDWR);
|
||||
if (_fd > 0) {
|
||||
sprintf(_dev,"zt%d",i);
|
||||
Utils::snprintf(_dev,sizeof(_dev),"zt%d",i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -316,8 +317,8 @@ EthernetTap::EthernetTap(
|
||||
}
|
||||
|
||||
// Configure MAC address and MTU, bring interface up
|
||||
sprintf(ethaddr,"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(int)mac[0],(int)mac[1],(int)mac[2],(int)mac[3],(int)mac[4],(int)mac[5]);
|
||||
sprintf(mtustr,"%u",mtu);
|
||||
Utils::snprintf(ethaddr,sizeof(ethaddr),"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(int)mac[0],(int)mac[1],(int)mac[2],(int)mac[3],(int)mac[4],(int)mac[5]);
|
||||
Utils::snprintf(mtustr,sizeof(mtustr),"%u",mtu);
|
||||
long cpid;
|
||||
if ((cpid = (long)vfork()) == 0) {
|
||||
execl(ifconfig,ifconfig,_dev,"lladdr",ethaddr,"mtu",mtustr,"up",(const char *)0);
|
||||
@ -895,7 +896,7 @@ EthernetTap::EthernetTap(
|
||||
// If we have a device, configure it
|
||||
if (_myDeviceInstanceId.length() > 0) {
|
||||
char tmps[4096];
|
||||
unsigned int tmpsl = sprintf_s(tmps,"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",(unsigned int)mac.data[0],(unsigned int)mac.data[1],(unsigned int)mac.data[2],(unsigned int)mac.data[3],(unsigned int)mac.data[4],(unsigned int)mac.data[5]) + 1;
|
||||
unsigned int tmpsl = Utils::snprintf(tmps,sizeof(tmps),"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",(unsigned int)mac.data[0],(unsigned int)mac.data[1],(unsigned int)mac.data[2],(unsigned int)mac.data[3],(unsigned int)mac.data[4],(unsigned int)mac.data[5]) + 1;
|
||||
RegSetKeyValueA(nwAdapters,mySubkeyName.c_str(),"NetworkAddress",REG_SZ,tmps,tmpsl);
|
||||
RegSetKeyValueA(nwAdapters,mySubkeyName.c_str(),"MAC",REG_SZ,tmps,tmpsl);
|
||||
DWORD tmp = mtu;
|
||||
@ -961,7 +962,7 @@ EthernetTap::EthernetTap(
|
||||
|
||||
// Open the tap, which is in this weird Windows analog of /dev
|
||||
char tapPath[4096];
|
||||
sprintf_s(tapPath,"\\\\.\\Global\\%s.tap",_myDeviceInstanceId.c_str());
|
||||
Utils::snprintf(tapPath,sizeof(tapPath),"\\\\.\\Global\\%s.tap",_myDeviceInstanceId.c_str());
|
||||
_tap = CreateFileA(tapPath,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_OVERLAPPED,NULL);
|
||||
if (_tap == INVALID_HANDLE_VALUE)
|
||||
throw std::runtime_error("unable to open tap in \\\\.\\Global\\ namespace");
|
||||
|
Reference in New Issue
Block a user