[alsa-devel] [PATCH TINYCOMPRESS 5/14] compress: Take local copy of compr_config structure

Richard Fitzgerald rf at opensource.wolfsonmicro.com
Sun Feb 10 01:09:44 CET 2013


Take a copy of the compr_config structure passed by the client.
This allows the client to use a structure in temporary memory
and avoids the possibility that tinycompress can be broken by the
client changing the content of its compr_config.

diff --git a/compress.c b/compress.c
index c4f215c..871c19e 100644
--- a/compress.c
+++ b/compress.c
@@ -81,7 +81,7 @@ struct compress {
 	int fd;
 	unsigned int flags;
 	char error[COMPR_ERR_MAX];
-	struct compr_config *config;
+	struct compr_config config;
 	int running;
 };
 
@@ -209,7 +209,8 @@ struct compress *compress_open(unsigned int card, unsigned int device,
 	if (!compress || !config)
 		return &bad_compress;
 
-	compress->config = config;
+	/* take a local copy of config */
+	compress->config = *config;
 
 	snprintf(fn, sizeof(fn), "/dev/snd/comprC%uD%u", card, device);
 
@@ -319,7 +320,7 @@ int compress_write(struct compress *compress, const void *buf, unsigned int size
 			return oops(compress, errno, "cannot get avail");
 
 		/* we will write only when avail > fragment size */
-		if (avail.avail < compress->config->fragment_size) {
+		if (avail.avail < compress->config.fragment_size) {
 			/* nothing to write so wait for 10secs */
 			ret = poll(&fds, 1, 1000000);
 			if (ret < 0)
-- 
1.7.2.5




More information about the Alsa-devel mailing list