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:
parent
eae05d928e
commit
d5f464c62b
2 changed files with 12 additions and 2 deletions
|
@ -48,5 +48,10 @@ int _impl_i2s_buf_write(struct device *dev, void *buf, size_t 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;
|
||||
}
|
||||
|
|
|
@ -98,7 +98,12 @@ Z_SYSCALL_HANDLER(i2s_buf_write, dev, buf, size)
|
|||
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue