realloc in buf_append

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Feb 17, 2013 at 11:32 AM, Mike Miller <mtmiller at ieee.org> wrote:
> A possible memory leak in the buf_append function was just reported
> [1]. At a glance it looks like most of the functions in http.c that
> use buf_append/buf_error will return ENOMEM back up the stack and
> openconnect will exit immediately. Users of the library should
> presumably do the same. I think it's still worth fixing to be safe,
> but do you see any possible conditions where this could be a problem?
> Thanks.
>
> [1] http://bugs.debian.org/700805

Good catch - this pattern shows up in a couple of places, e.g.

body = realloc(body, done + chunklen + 1);

*lineptr = realloc(*lineptr, *n);

opt = realloc(opt, sizeof(*opt) + opt->nr_choices * sizeof(*choice));

I wouldn't normally expect to be able to recover from exhausting the
heap space anyway, since many other random library calls will start
breaking.  But for the sake of argument would it make sense to wrap
realloc() with something like this?

int safe_realloc(void **ptr, size_t size)
{
	void *newptr = realloc(*ptr, size);
	if (newptr) {
		*ptr = newptr;
		return 0;
	}
	free(*ptr);
	return -ENOMEM;
}



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux