From 9a0dd8271e92a2e3bbd330c2a7e2fc05c7f3bde9 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 20 Feb 2011 19:56:59 +0100 Subject: [PATCH] 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. --- oss_write.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); -- 2.39.5