From 64fd1fe78ec19feb8350eb709e85901b5688ae28 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 20 May 2008 13:16:52 +0000 Subject: bugfix with strerror_r - still not working but at least not using uninitialized data --- src/Makefile | 4 ++-- src/PracticalSocket.cpp | 1 + src/anytun.cpp | 2 ++ src/authAlgo.cpp | 1 + src/bsd/tunDevice.cpp | 1 + src/cipher.cpp | 5 +++++ src/keyDerivation.cpp | 5 +++++ src/linux/tunDevice.cpp | 3 ++- 8 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index eca9774..11b54e9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -11,8 +11,8 @@ LD = g++ LDFLAGS = -g -Wall -O2 -lpthread -lgcrypt -lgpg-error -lboost_serialization ifeq ($(TARGET),Linux) -# CFLAGS += -D_XOPEN_SOURCE=600 -# CCFLAGS += -D_XOPEN_SOURCE=600 + CFLAGS += -D_XOPEN_SOURCE=600 + CCFLAGS += -D_XOPEN_SOURCE=600 LDFLAGS += -ldl endif ifeq ($(TARGET),OpenBSD) diff --git a/src/PracticalSocket.cpp b/src/PracticalSocket.cpp index 3ff286f..e08cac0 100644 --- a/src/PracticalSocket.cpp +++ b/src/PracticalSocket.cpp @@ -83,6 +83,7 @@ SocketException::SocketException(const string &message, bool inclSysMsg) if (inclSysMsg) { userMessage.append(": "); char buf[STERROR_TEXT_MAX]; + buf[0] = 0; strerror_r(errno, buf, STERROR_TEXT_MAX); userMessage.append(buf); } diff --git a/src/anytun.cpp b/src/anytun.cpp index ed6d845..fdeaead 100644 --- a/src/anytun.cpp +++ b/src/anytun.cpp @@ -364,6 +364,7 @@ bool initLibGCrypt() gcry_error_t err = gcry_control (GCRYCTL_DISABLE_SECMEM, 0); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; std::cout << "initLibGCrypt: Failed to disable secure memory: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX) << std::endl; return false; } @@ -372,6 +373,7 @@ bool initLibGCrypt() err = gcry_control(GCRYCTL_INITIALIZATION_FINISHED); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; std::cout << "initLibGCrypt: Failed to finish initialization: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX) << std::endl; return false; } diff --git a/src/authAlgo.cpp b/src/authAlgo.cpp index 617c93b..770bffe 100644 --- a/src/authAlgo.cpp +++ b/src/authAlgo.cpp @@ -75,6 +75,7 @@ void Sha1AuthAlgo::setKey(Buffer& key) gcry_error_t err = gcry_md_setkey( ctx_, key.getBuf(), key.getLength() ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "Sha1AuthAlgo::setKey: Failed to set cipher key: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } } diff --git a/src/bsd/tunDevice.cpp b/src/bsd/tunDevice.cpp index 0fe27f5..b47a1da 100644 --- a/src/bsd/tunDevice.cpp +++ b/src/bsd/tunDevice.cpp @@ -91,6 +91,7 @@ TunDevice::TunDevice(const char* dev_name, const char* dev_type, const char* ifc msg.append(device_file); msg.append("): "); char buf[STERROR_TEXT_MAX]; + buf[0] = 0; strerror_r(errno, buf, STERROR_TEXT_MAX); msg.append(buf); } diff --git a/src/cipher.cpp b/src/cipher.cpp index 593218f..3667290 100644 --- a/src/cipher.cpp +++ b/src/cipher.cpp @@ -80,6 +80,7 @@ AesIcmCipher::AesIcmCipher() : cipher_(NULL) gcry_error_t err = gcry_cipher_open( &cipher_, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, 0 ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_CRIT) << "AesIcmCipher::AesIcmCipher: Failed to open cipher" << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } } @@ -99,6 +100,7 @@ void AesIcmCipher::setKey(Buffer& key) gcry_error_t err = gcry_cipher_setkey( cipher_, key.getBuf(), key.getLength() ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "AesIcmCipher::setKey: Failed to set cipher key: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } } @@ -130,6 +132,7 @@ void AesIcmCipher::calc(u_int8_t* in, u_int32_t ilen, u_int8_t* out, u_int32_t o gcry_error_t err = gcry_cipher_reset( cipher_ ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "AesIcmCipher: Failed to reset cipher: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); return; } @@ -160,6 +163,7 @@ void AesIcmCipher::calc(u_int8_t* in, u_int32_t ilen, u_int8_t* out, u_int32_t o delete[] ctr_buf; if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "AesIcmCipher: Failed to set cipher CTR: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); return; } @@ -167,6 +171,7 @@ void AesIcmCipher::calc(u_int8_t* in, u_int32_t ilen, u_int8_t* out, u_int32_t o err = gcry_cipher_encrypt( cipher_, out, olen, in, ilen ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "AesIcmCipher: Failed to generate cipher bitstream: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); return; } diff --git a/src/keyDerivation.cpp b/src/keyDerivation.cpp index eda2189..12ba5d8 100644 --- a/src/keyDerivation.cpp +++ b/src/keyDerivation.cpp @@ -72,6 +72,7 @@ void AesIcmKeyDerivation::updateMasterKey() gcry_error_t err = gcry_cipher_setkey( cipher_, master_key_.getBuf(), master_key_.getLength() ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "KeyDerivation::updateMasterKey: Failed to set cipher key: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } } @@ -86,6 +87,7 @@ void AesIcmKeyDerivation::init(Buffer key, Buffer salt) gcry_error_t err = gcry_cipher_open( &cipher_, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR, 0 ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "KeyDerivation::init: Failed to open cipher: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); return; } @@ -108,6 +110,7 @@ void AesIcmKeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer gcry_error_t err = gcry_cipher_reset( cipher_ ); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "KeyDerivation::generate: Failed to reset cipher: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } @@ -149,6 +152,7 @@ void AesIcmKeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "KeyDerivation::generate: Failed to set CTR: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } @@ -156,6 +160,7 @@ void AesIcmKeyDerivation::generate(satp_prf_label label, seq_nr_t seq_nr, Buffer err = gcry_cipher_encrypt( cipher_, key, key.getLength(), NULL, 0); if( err ) { char buf[STERROR_TEXT_MAX]; + buf[0] = 0; cLog.msg(Log::PRIO_ERR) << "KeyDerivation::generate: Failed to generate cipher bitstream: " << gpg_strerror_r(err, buf, STERROR_TEXT_MAX); } } diff --git a/src/linux/tunDevice.cpp b/src/linux/tunDevice.cpp index a226641..559258b 100644 --- a/src/linux/tunDevice.cpp +++ b/src/linux/tunDevice.cpp @@ -28,7 +28,6 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#define _XOPEN_SOURCE 600 #include #include @@ -54,6 +53,7 @@ TunDevice::TunDevice(const char* dev_name, const char* dev_type, const char* ifc msg.append(DEFAULT_DEVICE); msg.append("): "); char buf[STERROR_TEXT_MAX]; + buf[0] = 0; strerror_r(errno, buf, STERROR_TEXT_MAX); msg.append(buf); throw std::runtime_error(msg); @@ -83,6 +83,7 @@ TunDevice::TunDevice(const char* dev_name, const char* dev_type, const char* ifc } else { std::string msg("tun/tap device ioctl failed: "); char buf[STERROR_TEXT_MAX]; + buf[0] = 0; strerror_r(errno, buf, STERROR_TEXT_MAX); msg.append(buf); throw std::runtime_error(msg); -- cgit v1.2.3