summaryrefslogtreecommitdiff
path: root/goodix_brl_spi.c
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2022-01-13 16:21:48 +0000
committerWendly Li <wendlyli@google.com>2022-01-21 08:51:13 +0000
commit39aab1926632e1b0b0e08ba4575ea447ef8dbc50 (patch)
treee66234078b20e5e5fa07b67e3f3f0fe2711157a4 /goodix_brl_spi.c
parent902c47acc28cbe034d96bb60a5f68740d7aee7a0 (diff)
downloadgoodix_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.c38
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;
}