diff options
author | Wendly Li <wendlyli@google.com> | 2022-01-13 16:21:48 +0000 |
---|---|---|
committer | Wendly Li <wendlyli@google.com> | 2022-01-21 08:51:13 +0000 |
commit | 39aab1926632e1b0b0e08ba4575ea447ef8dbc50 (patch) | |
tree | e66234078b20e5e5fa07b67e3f3f0fe2711157a4 /goodix_brl_spi.c | |
parent | 902c47acc28cbe034d96bb60a5f68740d7aee7a0 (diff) | |
download | goodix_touch-39aab1926632e1b0b0e08ba4575ea447ef8dbc50.tar.gz |
Fix memory leak
Bug: 214118883
Test: Build pass
Signed-off-by: Wendly Li <wendlyli@google.com>
Change-Id: Ie49543640734683906637e1959c478d05fc11e84
Diffstat (limited to 'goodix_brl_spi.c')
-rw-r--r-- | goodix_brl_spi.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/goodix_brl_spi.c b/goodix_brl_spi.c index e328b62..bc35268 100644 --- a/goodix_brl_spi.c +++ b/goodix_brl_spi.c @@ -53,13 +53,20 @@ static int goodix_spi_read_bra(struct device *dev, unsigned int addr, int ret = 0; rx_buf = kzalloc(SPI_READ_PREFIX_LEN + len, GFP_KERNEL); - tx_buf = kzalloc(SPI_READ_PREFIX_LEN + len, GFP_KERNEL); - if (!rx_buf || !tx_buf) { - ts_err("alloc tx/rx_buf failed, size:%d", + if (!rx_buf) { + ts_err("alloc rx_buf failed, size:%d", SPI_READ_PREFIX_LEN + len); return -ENOMEM; } + tx_buf = kzalloc(SPI_READ_PREFIX_LEN + len, GFP_KERNEL); + if (!tx_buf) { + ts_err("alloc tx_buf failed, size:%d", + SPI_READ_PREFIX_LEN + len); + ret = -ENOMEM; + goto err_alloc_rx_buf; + } + spi_message_init(&spi_msg); memset(&xfers, 0, sizeof(xfers)); @@ -82,12 +89,13 @@ static int goodix_spi_read_bra(struct device *dev, unsigned int addr, ret = spi_sync(spi, &spi_msg); if (ret < 0) { ts_err("spi transfer error:%d", ret); - goto exit; + goto err_spi_transfer; } memcpy(data, &rx_buf[SPI_READ_PREFIX_LEN], len); -exit: +err_spi_transfer: kfree(rx_buf); +err_alloc_rx_buf: kfree(tx_buf); return ret; } @@ -103,13 +111,20 @@ static int goodix_spi_read(struct device *dev, unsigned int addr, int ret = 0; rx_buf = kzalloc(SPI_READ_PREFIX_LEN - 1 + len, GFP_KERNEL); - tx_buf = kzalloc(SPI_READ_PREFIX_LEN - 1 + len, GFP_KERNEL); - if (!rx_buf || !tx_buf) { - ts_err("alloc tx/rx_buf failed, size:%d", - SPI_READ_PREFIX_LEN - 1 + len); + if (!rx_buf) { + ts_err("alloc rx_buf failed, size:%d", + SPI_READ_PREFIX_LEN + len); return -ENOMEM; } + tx_buf = kzalloc(SPI_READ_PREFIX_LEN - 1 + len, GFP_KERNEL); + if (!tx_buf) { + ts_err("alloc tx_buf failed, size:%d", + SPI_READ_PREFIX_LEN + len); + ret = -ENOMEM; + goto err_alloc_rx_buf; + } + spi_message_init(&spi_msg); memset(&xfers, 0, sizeof(xfers)); @@ -131,12 +146,13 @@ static int goodix_spi_read(struct device *dev, unsigned int addr, ret = spi_sync(spi, &spi_msg); if (ret < 0) { ts_err("spi transfer error:%d", ret); - goto exit; + goto err_spi_transfer; } memcpy(data, &rx_buf[SPI_READ_PREFIX_LEN - 1], len); -exit: +err_spi_transfer: kfree(rx_buf); +err_alloc_rx_buf: kfree(tx_buf); return ret; } |