Example #1
0
void *
keepalived_realloc(void *buffer, size_t size, char *file, char *function,
		   int line)
{
	int i;
	void *buf = buffer, *buf2;
	long check;

	if (buffer == NULL) {
		fprintf(log_op, "realloc %p %s, %3d %s\n", buffer, file, line, function);
		i = number_alloc_list++;

		assert(number_alloc_list < MAX_ALLOC_LIST);

		alloc_list[i].ptr = NULL;
		alloc_list[i].size = 0;
		alloc_list[i].file = file;
		alloc_list[i].func = function;
		alloc_list[i].line = line;
		alloc_list[i].type = 3;
		return keepalived_malloc(size, file, function, line);
	}

	for (i = 0; i < number_alloc_list; i++) {
		if (alloc_list[i].ptr == buf) {
			buf = alloc_list[i].ptr;
			break;
		}
	}

	/* not found */
	if (i == number_alloc_list) {
		fprintf(log_op, "realloc ERROR no matching zalloc %p \n", buffer);
		number_alloc_list++;

		assert(number_alloc_list < MAX_ALLOC_LIST);

		alloc_list[i].ptr = buf;
		alloc_list[i].size = 0;
		alloc_list[i].file = file;
		alloc_list[i].func = function;
		alloc_list[i].line = line;
		alloc_list[i].type = 9;
		__set_bit(MEM_ERR_DETECT_BIT, &debug);	/* Memory Error detect */
		return NULL;
	}

	buf2 = ((char *) buf) + alloc_list[i].size;

	if (*(long *) (buf2) != alloc_list[i].csum) {
		alloc_list[i].type = 1;
		__set_bit(MEM_ERR_DETECT_BIT, &debug);	/* Memory Error detect */
	}
	buf = realloc(buffer, size + sizeof (long));

	check = (long)size + 0xa5a5;
	*(long *) ((char *) buf + size) = check;
	alloc_list[i].csum = check;

	fprintf(log_op, "realloc [%3d:%3d] %p, %4zu %s %d %s -> %p %4zu %s %d %s\n",
	       i, number_alloc_list, alloc_list[i].ptr,
	       alloc_list[i].size, file, line, function, buf, size,
	       alloc_list[i].file, alloc_list[i].line,
	       alloc_list[i].func);

	alloc_list[i].ptr = buf;
	alloc_list[i].size = size;
	alloc_list[i].file = file;
	alloc_list[i].line = line;
	alloc_list[i].func = function;

	return buf;
}
Example #2
0
void *
keepalived_realloc(void *buffer, unsigned long size, char *file, char *function,
                   int line)
{
    int i = 0;
    void *buf, *buf2;
    long check;

    if (buffer == NULL) {
        printf("realloc %p %s, %3d %s\n", buffer, file, line, function);
        i = number_alloc_list++;

        assert(number_alloc_list < MAX_ALLOC_LIST);

        alloc_list[i].ptr = NULL;
        alloc_list[i].size = 0;
        alloc_list[i].file = file;
        alloc_list[i].func = function;
        alloc_list[i].line = line;
        alloc_list[i].type = 3;
        return keepalived_malloc(size, file, function, line);
    }

    buf = buffer;

    while (i < number_alloc_list) {
        if (alloc_list[i].ptr == buf) {
            buf = alloc_list[i].ptr;
            break;
        }
        i++;
    }

    /* not found */
    if (i == number_alloc_list) {
        printf("realloc ERROR no matching zalloc %p \n", buffer);
        number_alloc_list++;

        assert(number_alloc_list < MAX_ALLOC_LIST);

        alloc_list[i].ptr = buf;
        alloc_list[i].size = 0;
        alloc_list[i].file = file;
        alloc_list[i].func = function;
        alloc_list[i].line = line;
        alloc_list[i].type = 9;
        debug |= 512;	/* Memory Error detect */
        return NULL;
    }

    buf2 = ((char *) buf) + alloc_list[i].size;

    if (*(long *) (buf2) != alloc_list[i].csum) {
        alloc_list[i].type = 1;
        debug |= 512;	/* Memory Error detect */
    }
    buf = realloc(buffer, size + sizeof (long));

    check = 0xa5a5 + size;
    *(long *) ((char *) buf + size) = check;
    alloc_list[i].csum = check;

    if (debug & 1)
        printf("realloc [%3d:%3d] %p, %4ld %s %d %s -> %p %4ld %s %d %s\n",
               i, number_alloc_list, alloc_list[i].ptr,
               alloc_list[i].size, file, line, function, buf, size,
               alloc_list[i].file, alloc_list[i].line,
               alloc_list[i].func);

    alloc_list[i].ptr = buf;
    alloc_list[i].size = size;
    alloc_list[i].file = file;
    alloc_list[i].line = line;
    alloc_list[i].func = function;

    return buf;
}