memset all stack-allocated structs used to send messages; ok stsp@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
diff --git a/lib/privsep.c b/lib/privsep.c
index 2d5319f..1c0f663 100644
--- a/lib/privsep.c
+++ b/lib/privsep.c
@@ -297,6 +297,7 @@ got_privsep_send_raw_obj(struct imsgbuf *ibuf, off_t size, size_t hdrlen,
size_t len = sizeof(iobj);
struct ibuf *wbuf;
+ memset(&iobj, 0, sizeof(iobj));
iobj.hdrlen = hdrlen;
iobj.size = size;
@@ -387,6 +388,7 @@ got_privsep_send_commit_req(struct imsgbuf *ibuf, int fd,
void *data;
size_t len;
+ memset(&iobj, 0, sizeof(iobj));
if (pack_idx != -1) { /* commit is packed */
iobj.idx = pack_idx;
memcpy(iobj.id, id->sha1, sizeof(iobj.id));
@@ -445,6 +447,7 @@ got_privsep_send_tag_req(struct imsgbuf *ibuf, int fd,
void *data;
size_t len;
+ memset(&iobj, 0, sizeof(iobj));
if (pack_idx != -1) { /* tag is packed */
iobj.idx = pack_idx;
memcpy(iobj.id, id->sha1, sizeof(iobj.id));
@@ -471,6 +474,7 @@ got_privsep_send_blob_req(struct imsgbuf *ibuf, int infd,
void *data;
size_t len;
+ memset(&iobj, 0, sizeof(iobj));
if (pack_idx != -1) { /* blob is packed */
iobj.idx = pack_idx;
memcpy(iobj.id, id->sha1, sizeof(iobj.id));
@@ -1423,6 +1427,8 @@ send_tree_entries_batch(struct imsgbuf *ibuf,
struct got_imsg_tree_entries ientries;
int i;
+ memset(&ientries, 0, sizeof(ientries));
+
wbuf = imsg_create(ibuf, GOT_IMSG_TREE_ENTRIES, 0, 0, len);
if (wbuf == NULL)
return got_error_from_errno("imsg_create TREE_ENTRY");
@@ -1495,6 +1501,7 @@ got_privsep_send_tree(struct imsgbuf *ibuf,
const struct got_error *err = NULL;
struct got_imsg_tree_object itree;
+ memset(&itree, 0, sizeof(itree));
itree.nentries = nentries;
if (imsg_compose(ibuf, GOT_IMSG_TREE, 0, 0, -1, &itree, sizeof(itree))
== -1)
@@ -1685,6 +1692,7 @@ got_privsep_send_blob(struct imsgbuf *ibuf, size_t size, size_t hdrlen,
{
struct got_imsg_blob iblob;
+ memset(&iblob, 0, sizeof(iblob));
iblob.size = size;
iblob.hdrlen = hdrlen;
@@ -1964,6 +1972,9 @@ got_privsep_init_pack_child(struct imsgbuf *ibuf, struct got_pack *pack,
struct got_imsg_pack ipack;
int fd;
+ memset(&ipackidx, 0, sizeof(ipackidx));
+ memset(&ipack, 0, sizeof(ipack));
+
ipackidx.len = packidx->len;
ipackidx.packfile_size = pack->filesize;
fd = dup(packidx->fd);
@@ -2002,6 +2013,7 @@ got_privsep_send_packed_obj_req(struct imsgbuf *ibuf, int idx,
{
struct got_imsg_packed_object iobj;
+ memset(&iobj, 0, sizeof(iobj));
iobj.idx = idx;
memcpy(iobj.id, id->sha1, sizeof(iobj.id));
@@ -2019,6 +2031,7 @@ got_privsep_send_packed_raw_obj_req(struct imsgbuf *ibuf, int idx,
{
struct got_imsg_packed_object iobj;
+ memset(&iobj, 0, sizeof(iobj));
iobj.idx = idx;
memcpy(iobj.id, id->sha1, sizeof(iobj.id));
@@ -2983,6 +2996,7 @@ got_privsep_send_raw_delta_req(struct imsgbuf *ibuf, int idx,
{
struct got_imsg_raw_delta_request dreq;
+ memset(&dreq, 0, sizeof(dreq));
dreq.idx = idx;
memcpy(dreq.id, id->sha1, SHA1_DIGEST_LENGTH);
@@ -3007,6 +3021,7 @@ got_privsep_send_raw_delta(struct imsgbuf *ibuf, uint64_t base_size,
struct got_imsg_raw_delta idelta;
int ret;
+ memset(&idelta, 0, sizeof(idelta));
idelta.base_size = base_size;
idelta.result_size = result_size;
idelta.delta_size = delta_size;
@@ -3089,6 +3104,8 @@ send_idlist(struct imsgbuf *ibuf, struct got_object_id **ids, size_t nids)
struct ibuf *wbuf;
size_t i;
+ memset(&idlist, 0, sizeof(idlist));
+
if (nids > GOT_IMSG_OBJ_ID_LIST_MAX_NIDS)
return got_error(GOT_ERR_NO_SPACE);
@@ -3224,6 +3241,8 @@ got_privsep_send_reused_deltas(struct imsgbuf *ibuf,
struct got_imsg_reused_deltas ideltas;
size_t i;
+ memset(&ideltas, 0, sizeof(ideltas));
+
if (ndeltas > GOT_IMSG_REUSED_DELTAS_MAX_NDELTAS)
return got_error(GOT_ERR_NO_SPACE);