Browse Source

Merge branch 'dejavusec' into v5_0

Fixes for a few security vulnerabilities reported by Mick Ayzenberg
of DejaVu Security.
djm34
Noel Maersk 10 years ago
parent
commit
a5bec2b999
  1. 3
      AUTHORS.md
  2. 4
      sgminer.c
  3. 33
      util.c

3
AUTHORS.md

@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
## Core
* Multiple algorithms and switching: Jan Berdajs <mrbrdo at mrbrdo dot net> 15bULC8snaKAMeFb3xBmmhbWj1xyTmBUfm
* Scrypt-only refactor: Noel Maersk <veox at wemakethings dot net> LfxRFgXzA13TSTxgFGUFEtumv5ShGzAmLw
* Historical scrypt-only refactor: Noel Maersk <veox at wemakethings dot net> 12jF1VExtmmMu8D36vo4Y4CYqLK5yCtLC4
* Core: Martin Danielsen <kalroth {at} gmail _dot_ com> 1DNBcSEENBwDKrcTyTW61ezWhzsPy5imkn
* Core: Con Kolivas <kernel [at] kolivas {dot} org> 15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ
* Core: Luke Dashjr <luke-jr+cgminer @at@ utopios .dot. org> 1QATWksNFGeUJCWBrN4g6hGM178Lovm7Wh
@ -33,7 +33,6 @@ updated by many others. @@ -33,7 +33,6 @@ updated by many others.
## Testing, bug fixes, improvements
* Hot-switching OpenCL kernel (N-Factor): Jan Berdajs <mrbrdo>
* Michael Fiano <mfiano>
* Gabriel Devenyi <gdevenyi>
* Benjamin Herrenschmidt <ozbenh>

4
sgminer.c

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
/*
* Copyright 2013-2014 sgminer developers (see AUTHORS.md)
* Copyright 2011-2013 Con Kolivas
* Copyright 2011-2012 Luke Dashjr
* Copyright 2010 Jeff Garzik
@ -756,8 +757,7 @@ static void setup_url(struct pool *pool, char *arg) @@ -756,8 +757,7 @@ static void setup_url(struct pool *pool, char *arg)
return;
opt_set_charp(arg, &pool->rpc_url);
if (strncmp(arg, "http://", 7) &&
strncmp(arg, "https://", 8)) {
if (strncmp(arg, "http://", 7) && strncmp(arg, "https://", 8)) {
char *httpinput;
httpinput = (char *)malloc(255);

33
util.c

@ -1220,6 +1220,13 @@ bool extract_sockaddr(char *url, char **sockaddr_url, char **sockaddr_port) @@ -1220,6 +1220,13 @@ bool extract_sockaddr(char *url, char **sockaddr_url, char **sockaddr_port)
if (url_len < 1)
return false;
if (url_len >= sizeof(url_address))
{
applog(LOG_WARNING, "%s: Truncating overflowed address '%.*s'",
__func__, url_len, url_begin);
url_len = sizeof(url_address) - 1;
}
sprintf(url_address, "%.*s", url_len, url_begin);
if (port_len) {
@ -1593,17 +1600,23 @@ static bool parse_notify(struct pool *pool, json_t *val) @@ -1593,17 +1600,23 @@ static bool parse_notify(struct pool *pool, json_t *val)
pool->swork.nbit,
"00000000", /* nonce */
workpadding);
if (unlikely(!hex2bin(pool->header_bin, header, 128)))
quit(1, "Failed to convert header to header_bin in parse_notify");
if (unlikely(!hex2bin(pool->header_bin, header, 128))) {
applog(LOG_WARNING, "%s: Failed to convert header to header_bin, got %s", __func__, header);
pool_failed(pool);
// TODO: memory leaks? goto out, clean up there?
return false;
}
cb1 = (unsigned char *)calloc(cb1_len, 1);
if (unlikely(!cb1))
quithere(1, "Failed to calloc cb1 in parse_notify");
hex2bin(cb1, coinbase1, cb1_len);
cb2 = (unsigned char *)calloc(cb2_len, 1);
if (unlikely(!cb2))
quithere(1, "Failed to calloc cb2 in parse_notify");
hex2bin(cb2, coinbase2, cb2_len);
free(pool->coinbase);
align_len(&alloc_len);
pool->coinbase = (unsigned char *)calloc(alloc_len, 1);
@ -1611,6 +1624,7 @@ static bool parse_notify(struct pool *pool, json_t *val) @@ -1611,6 +1624,7 @@ static bool parse_notify(struct pool *pool, json_t *val)
quit(1, "Failed to calloc pool coinbase in parse_notify");
memcpy(pool->coinbase, cb1, cb1_len);
memcpy(pool->coinbase + cb1_len, pool->nonce1bin, pool->n1_len);
// NOTE: gap for nonce2, filled at work generation time
memcpy(pool->coinbase + cb1_len + pool->n1_len + pool->n2size, cb2, cb2_len);
cg_wunlock(&pool->data_lock);
@ -1711,15 +1725,14 @@ static void __suspend_stratum(struct pool *pool) @@ -1711,15 +1725,14 @@ static void __suspend_stratum(struct pool *pool)
static bool parse_reconnect(struct pool *pool, json_t *val)
{
char *sockaddr_url, *stratum_port, *tmp;
char *url, *port, address[256];
if (opt_disable_client_reconnect) {
applog(LOG_WARNING, "Stratum client.reconnect forbidden, aborting.");
applog(LOG_WARNING, "Stratum client.reconnect received but is disabled, not reconnecting.");
return false;
}
memset(address, 0, 255);
char *url, *port, address[256];
char *sockaddr_url, *stratum_port, *tmp; /* Tempvars. */
url = (char *)json_string_value(json_array_get(val, 0));
if (!url)
url = pool->sockaddr_url;
@ -1728,8 +1741,7 @@ static bool parse_reconnect(struct pool *pool, json_t *val) @@ -1728,8 +1741,7 @@ static bool parse_reconnect(struct pool *pool, json_t *val)
if (!port)
port = pool->stratum_port;
sprintf(address, "%s:%s", url, port);
snprintf(address, sizeof(address), "%s:%s", url, port);
if (!extract_sockaddr(address, &sockaddr_url, &stratum_port))
return false;
@ -2505,7 +2517,8 @@ resend: @@ -2505,7 +2517,8 @@ resend:
goto out;
}
n2size = json_integer_value(json_array_get(res_val, 2));
if (!n2size) {
if (n2size < 1)
{
applog(LOG_INFO, "Failed to get n2size in initiate_stratum");
free(sessionid);
free(nonce1);

Loading…
Cancel
Save