diff --git a/apps/wolfsshd/auth.c b/apps/wolfsshd/auth.c index 4a25b480c..03b15abe6 100644 --- a/apps/wolfsshd/auth.c +++ b/apps/wolfsshd/auth.c @@ -413,7 +413,7 @@ static int CheckPasswordUnix(const char* usr, const byte* pw, word32 pwSz, WOLFS } if (ret == WS_SUCCESS) { storedHashCpy = WSTRDUP(storedHash, NULL, DYNTYPE_STRING); - if (storedHash == NULL) { + if (storedHashCpy == NULL) { wolfSSH_Log(WS_LOG_ERROR, "[SSHD] Error getting stored hash copy"); ret = WS_MEMORY_E; diff --git a/apps/wolfsshd/wolfsshd.c b/apps/wolfsshd/wolfsshd.c index 182beffb6..f3f9251b8 100644 --- a/apps/wolfsshd/wolfsshd.c +++ b/apps/wolfsshd/wolfsshd.c @@ -316,7 +316,7 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx, /* create a new WOLFSSH_CTX */ *ctx = wolfSSH_CTX_new(WOLFSSH_ENDPOINT_SERVER, NULL); - if (ctx == NULL) { + if (*ctx == NULL) { wolfSSH_Log(WS_LOG_ERROR, "[SSHD] Couldn't allocate SSH CTX data."); ret = WS_MEMORY_E; } diff --git a/src/internal.c b/src/internal.c index f04797fd6..cca71b28b 100644 --- a/src/internal.c +++ b/src/internal.c @@ -30,6 +30,7 @@ #endif #include +#include #include #include #include @@ -9469,11 +9470,15 @@ static int DoChannelWindowAdjust(WOLFSSH* ssh, WLOG(WS_LOG_INFO, " peerWindowSz = %u", channel->peerWindowSz); - channel->peerWindowSz += bytesToAdd; - - WLOG(WS_LOG_INFO, " update peerWindowSz = %u", - channel->peerWindowSz); - + if (bytesToAdd > UINT32_MAX - channel->peerWindowSz) { + ret = WS_OVERFLOW_E; + WLOG(WS_LOG_DEBUG, "peer window adjust would overflow"); + } + else { + channel->peerWindowSz += bytesToAdd; + WLOG(WS_LOG_INFO, " update peerWindowSz = %u", + channel->peerWindowSz); + } } } diff --git a/src/wolfscp.c b/src/wolfscp.c index f9774004a..f170444f4 100644 --- a/src/wolfscp.c +++ b/src/wolfscp.c @@ -1423,9 +1423,10 @@ int ReceiveScpMessage(WOLFSSH* ssh) if (err == 0) { WOLFSSH_CHANNEL* channel; channel = wolfSSH_ChannelFind(ssh, lastChannel, WS_CHANNEL_ID_SELF); - if (channel == NULL) + if (channel == NULL) { ret = WS_INVALID_CHANID; - if (wolfSSH_ChannelGetEof(channel)) { + } + else if (wolfSSH_ChannelGetEof(channel)) { return WS_EOF; } } @@ -2217,7 +2218,7 @@ static int GetFileStats(void *fs, ScpSendCtx* ctx, const char* fileName, (word64)ctx->s.ftLastWriteTime.dwLowDateTime; *fileMode = 0555 | - (ctx->s.dwFileAttributes | FILE_ATTRIBUTE_READONLY ? 0 : 0200); + (ctx->s.dwFileAttributes & FILE_ATTRIBUTE_READONLY ? 0 : 0200); *fileMode |= (ctx->s.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? 0x4000 : 0; #else if (WSTAT(fs, fileName, &ctx->s) < 0) {