i2s: fix slab leak in i2s_buf_write()

A failed return value from i2s_write() requires that the
slab we allocated earlier be freed.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
Andrew Boie 2018-11-15 13:11:36 -08:00 committed by Anas Nashif
commit d5f464c62b
2 changed files with 12 additions and 2 deletions

View file

@ -48,5 +48,10 @@ int _impl_i2s_buf_write(struct device *dev, void *buf, size_t size)
memcpy(mem_block, (void *)buf, size); memcpy(mem_block, (void *)buf, size);
return i2s_write((struct device *)dev, mem_block, size); ret = i2s_write((struct device *)dev, mem_block, size);
if (ret != 0) {
k_mem_slab_free(tx_cfg->mem_slab, &mem_block);
}
return ret;
} }

View file

@ -98,7 +98,12 @@ Z_SYSCALL_HANDLER(i2s_buf_write, dev, buf, size)
Z_OOPS(ret); Z_OOPS(ret);
} }
return i2s_write((struct device *)dev, mem_block, size); ret = i2s_write((struct device *)dev, mem_block, size);
if (ret != 0) {
k_mem_slab_free(tx_cfg->mem_slab, &mem_block);
}
return ret;
} }
Z_SYSCALL_HANDLER(i2s_trigger, dev, dir, cmd) Z_SYSCALL_HANDLER(i2s_trigger, dev, dir, cmd)