summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/network.h6
-rw-r--r--src/build.c7
2 files changed, 8 insertions, 5 deletions
diff --git a/include/network.h b/include/network.h
index 2487c81..f24fb5f 100644
--- a/include/network.h
+++ b/include/network.h
@@ -49,7 +49,7 @@ enum {
#define BUILD_NETMSG(ct, query) \
({ \
char __net[4096]; \
- memset(__net, 0, sizeof(__net)); \
+ memset(__net, 0, NETHDR_SIZ + NETPLD_SIZ); \
build_netmsg(ct, query, (struct nethdr *) __net); \
(struct nethdr *) __net; \
})
@@ -170,8 +170,8 @@ struct netattr {
#define NTA_NEXT(x, len) \
( \
- len -= NTA_ALIGN(NTA_LENGTH(x->nta_len)), \
- (struct netattr *)(((char *)x) + NTA_ALIGN(NTA_LENGTH(x->nta_len))) \
+ len -= NTA_ALIGN(x->nta_len), \
+ (struct netattr *)(((char *)x) + NTA_ALIGN(x->nta_len)) \
)
#define NTA_ALIGNTO 4
diff --git a/src/build.c b/src/build.c
index 5143048..c776de8 100644
--- a/src/build.c
+++ b/src/build.c
@@ -24,9 +24,12 @@ static inline void *
put_header(struct netpld *pld, int attr, size_t len)
{
struct netattr *nta = PLD_TAIL(pld);
- pld->len += NTA_ALIGN(NTA_LENGTH(len));
+ int total_size = NTA_ALIGN(NTA_LENGTH(len));
+ int attr_size = NTA_LENGTH(len);
+ pld->len += total_size;
nta->nta_attr = htons(attr);
- nta->nta_len = htons(len);
+ nta->nta_len = htons(attr_size);
+ memset((unsigned char *)nta + attr_size, 0, total_size - attr_size);
return NTA_DATA(nta);
}