diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-04-30 11:57:09 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-04-30 11:57:09 +0530 |
commit | 1cdeb2372ddecac0dfe0c132a033e9590ffa07d2 (patch) | |
tree | e0265a463391655f3b8fa068b1578ec5e2d11ad0 /nscd/aicache.c | |
parent | 16b293a7a6f65d8ff348a603d19e8fd4372fa3a9 (diff) | |
download | glibc-1cdeb2372ddecac0dfe0c132a033e9590ffa07d2.zip glibc-1cdeb2372ddecac0dfe0c132a033e9590ffa07d2.tar.gz glibc-1cdeb2372ddecac0dfe0c132a033e9590ffa07d2.tar.bz2 |
Consolidate code to initialize nscd dataset header
This patch consolidates the code to initialize the header of a dataset
into a single set of functions (one for positive and another for
negative datasets) primarily to reduce repetition of code. The
secondary reason is to simplify Patch 2/2 which fixes the problem of
an uninitialized byte in the header by initializing an unused field in
the structure and hence preventing a possible data leak into the cache
file.
Diffstat (limited to 'nscd/aicache.c')
-rw-r--r-- | nscd/aicache.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/nscd/aicache.c b/nscd/aicache.c index 98d40a1..d7966bd 100644 --- a/nscd/aicache.c +++ b/nscd/aicache.c @@ -383,17 +383,12 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, cp = family; } - /* Fill in the rest of the dataset. */ - dataset->head.allocsize = total + req->key_len; - dataset->head.recsize = total - offsetof (struct dataset, resp); - dataset->head.notfound = false; - dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1); - dataset->head.usable = true; - - /* Compute the timeout time. */ - dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl; - timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl; + timeout = datahead_init_pos (&dataset->head, total + req->key_len, + total - offsetof (struct dataset, resp), + he == NULL ? 0 : dh->nreloads + 1, + ttl == INT32_MAX ? db->postimeout : ttl); + /* Fill in the rest of the dataset. */ dataset->resp.version = NSCD_VERSION; dataset->resp.found = 1; dataset->resp.naddrs = naddrs; @@ -528,15 +523,9 @@ next_nip: else if ((dataset = mempool_alloc (db, (sizeof (struct dataset) + req->key_len), 1)) != NULL) { - dataset->head.allocsize = sizeof (struct dataset) + req->key_len; - dataset->head.recsize = total; - dataset->head.notfound = true; - dataset->head.nreloads = 0; - dataset->head.usable = true; - - /* Compute the timeout time. */ - timeout = dataset->head.timeout = time (NULL) + db->negtimeout; - dataset->head.ttl = db->negtimeout; + timeout = datahead_init_neg (&dataset->head, + sizeof (struct dataset) + req->key_len, + total, db->negtimeout); /* This is the reply. */ memcpy (&dataset->resp, ¬found, total); |