From: Andre Noll Date: Sun, 20 Feb 2011 18:56:59 +0000 (+0100) Subject: Fix oss_init() error path. X-Git-Tag: v0.4.6~36 X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=9a0dd8271e92a2e3bbd330c2a7e2fc05c7f3bde9;p=paraslash.git Fix oss_init() error path. A bug similar to the one fixed in the previous patch for the alsa writer is also present in the oss writer: If oss_init() fails the ->private_data pointer is non-NULL, but its contents have already been freed. glibc detects this, aborts the process and spits out *** glibc detected *** ./para_write: double free or corruption (fasttop): 0x080622a0 *** Fix this bug by initializing ->private_data only if oss_init() succeeds. --- diff --git a/oss_write.c b/oss_write.c index df9608a8..70a58203 100644 --- a/oss_write.c +++ b/oss_write.c @@ -88,7 +88,6 @@ static int oss_init(struct writer_node *wn, unsigned sample_rate, struct oss_write_args_info *conf = wn->conf; struct private_oss_write_data *powd = para_calloc(sizeof(*powd)); - wn->private_data = powd; PARA_INFO_LOG("opening %s\n", conf->device_arg); ret = para_open(conf->device_arg, O_WRONLY, 0); if (ret < 0) @@ -149,6 +148,7 @@ static int oss_init(struct writer_node *wn, unsigned sample_rate, sample_rate); } wn->min_iqs = powd->bytes_per_frame; + wn->private_data = powd; return 1; err: close(powd->fd);