Skip to content

Commit

Permalink
[TIPC]: Prevent name table corruption if no room for new publication
Browse files Browse the repository at this point in the history
Now exits cleanly if attempt to allocate larger array of subsequences fails,
without losing track of pointer to existing array.

Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Per Liden <per.liden@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Allan Stephens authored and David S. Miller committed Jun 26, 2006
1 parent 5e3c885 commit 9ab230f
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions net/tipc/name_table.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,18 +284,18 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
/* Ensure there is space for new sub-sequence */

if (nseq->first_free == nseq->alloc) {
struct sub_seq *sseqs = nseq->sseqs;
nseq->sseqs = tipc_subseq_alloc(nseq->alloc * 2);
if (nseq->sseqs != NULL) {
memcpy(nseq->sseqs, sseqs,
nseq->alloc * sizeof (struct sub_seq));
kfree(sseqs);
dbg("Allocated %u sseqs\n", nseq->alloc);
nseq->alloc *= 2;
} else {
struct sub_seq *sseqs = tipc_subseq_alloc(nseq->alloc * 2);

if (!sseqs) {
warn("Memory squeeze; failed to create sub-sequence\n");
return NULL;
}
dbg("Allocated %u more sseqs\n", nseq->alloc);
memcpy(sseqs, nseq->sseqs,
nseq->alloc * sizeof(struct sub_seq));
kfree(nseq->sseqs);
nseq->sseqs = sseqs;
nseq->alloc *= 2;
}
dbg("Have %u sseqs for type %u\n", nseq->alloc, type);

Expand Down

0 comments on commit 9ab230f

Please sign in to comment.