mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 05:12:45 +01:00
Add valgrind memcheck helpers.
Otherwise valgrind tells you when you test a hash; you want to know if you hash uninitialized memory long before that. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
143e7e032c
commit
602117e8bb
2
Makefile
2
Makefile
@ -14,7 +14,7 @@ CCAN_OBJS := ccan-crypto-sha256.o ccan-crypto-shachain.o ccan-err.o ccan-tal.o c
|
|||||||
HEADERS := $(wildcard *.h)
|
HEADERS := $(wildcard *.h)
|
||||||
|
|
||||||
CCANDIR := ccan/
|
CCANDIR := ccan/
|
||||||
CFLAGS := -g -Wall -I $(CCANDIR)
|
CFLAGS := -g -Wall -I $(CCANDIR) -DVALGRIND_HEADERS=1
|
||||||
LDLIBS := -lcrypto -lprotobuf-c
|
LDLIBS := -lcrypto -lprotobuf-c
|
||||||
$(PROGRAMS): CFLAGS+=-I.
|
$(PROGRAMS): CFLAGS+=-I.
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#include "shadouble.h"
|
#include "shadouble.h"
|
||||||
|
#include "valgrind.h"
|
||||||
|
|
||||||
void sha256_double(struct sha256_double *shadouble, const void *p, size_t len)
|
void sha256_double(struct sha256_double *shadouble, const void *p, size_t len)
|
||||||
{
|
{
|
||||||
sha256(&shadouble->sha, p, len);
|
sha256(&shadouble->sha, check_mem(p, len), len);
|
||||||
sha256(&shadouble->sha, &shadouble->sha, sizeof(shadouble->sha));
|
sha256(&shadouble->sha, &shadouble->sha, sizeof(shadouble->sha));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <ccan/tal/grab_file/grab_file.h>
|
#include <ccan/tal/grab_file/grab_file.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "tx.h"
|
#include "tx.h"
|
||||||
|
#include "valgrind.h"
|
||||||
|
|
||||||
static void add_varint(varint_t v,
|
static void add_varint(varint_t v,
|
||||||
void (*add)(const void *, size_t, void *), void *addp)
|
void (*add)(const void *, size_t, void *), void *addp)
|
||||||
@ -87,7 +88,7 @@ static void add_tx(const struct bitcoin_tx *tx,
|
|||||||
static void add_sha(const void *data, size_t len, void *shactx_)
|
static void add_sha(const void *data, size_t len, void *shactx_)
|
||||||
{
|
{
|
||||||
struct sha256_ctx *ctx = shactx_;
|
struct sha256_ctx *ctx = shactx_;
|
||||||
sha256_update(ctx, data, len);
|
sha256_update(ctx, check_mem(data, len), len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sha256_tx(struct sha256_ctx *ctx, const struct bitcoin_tx *tx)
|
void sha256_tx(struct sha256_ctx *ctx, const struct bitcoin_tx *tx)
|
||||||
@ -101,7 +102,7 @@ static void add_linearize(const void *data, size_t len, void *pptr_)
|
|||||||
size_t oldsize = tal_count(*pptr);
|
size_t oldsize = tal_count(*pptr);
|
||||||
|
|
||||||
tal_resize(pptr, oldsize + len);
|
tal_resize(pptr, oldsize + len);
|
||||||
memcpy(*pptr + oldsize, data, len);
|
memcpy(*pptr + oldsize, check_mem(data, len), len);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 *linearize_tx(const tal_t *ctx, const struct bitcoin_tx *tx)
|
u8 *linearize_tx(const tal_t *ctx, const struct bitcoin_tx *tx)
|
||||||
@ -157,7 +158,7 @@ static const u8 *pull(const u8 **cursor, size_t *max, void *copy, size_t n)
|
|||||||
*max -= n;
|
*max -= n;
|
||||||
if (copy)
|
if (copy)
|
||||||
memcpy(copy, p, n);
|
memcpy(copy, p, n);
|
||||||
return p;
|
return check_mem(p, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 pull_varint(const u8 **cursor, size_t *max)
|
static u64 pull_varint(const u8 **cursor, size_t *max)
|
||||||
|
18
bitcoin/valgrind.h
Normal file
18
bitcoin/valgrind.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef LIGHTNING_VALGRIND_H
|
||||||
|
#define LIGHTNING_VALGRIND_H
|
||||||
|
|
||||||
|
#ifdef VALGRIND_HEADERS
|
||||||
|
#include <valgrind/memcheck.h>
|
||||||
|
#elif !defined(VALGRIND_CHECK_MEM_IS_DEFINED)
|
||||||
|
#define VALGRIND_CHECK_MEM_IS_DEFINED(p, len)
|
||||||
|
#define RUNNING_ON_VALGRIND 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Useful for hashing: makes sure we're not hashing crap *before* we use
|
||||||
|
* the hash value for something. */
|
||||||
|
static inline void *check_mem(const void *data, size_t len)
|
||||||
|
{
|
||||||
|
VALGRIND_CHECK_MEM_IS_DEFINED(data, len);
|
||||||
|
return (void *)data;
|
||||||
|
}
|
||||||
|
#endif /* LIGHTNING_VALGRIND_H */
|
Loading…
Reference in New Issue
Block a user