From 1077a6180d5dd26480222829128997fa64cc254c Mon Sep 17 00:00:00 2001 From: AntoniuMiclaus Date: Fri, 7 Sep 2018 13:33:12 +0300 Subject: [PATCH] drivers:linux_platform:platform_drivers: fix memory leak Free allocated memory in each function where memory is allocated for 'descriptor' pointer. Signed-off-by: Antoniu Miclaus --- drivers/linux_platform/platform_drivers.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/linux_platform/platform_drivers.c b/drivers/linux_platform/platform_drivers.c index 15a27f25b13..0e9db3d0aa1 100644 --- a/drivers/linux_platform/platform_drivers.c +++ b/drivers/linux_platform/platform_drivers.c @@ -72,6 +72,7 @@ int32_t i2c_init(i2c_desc **desc, descriptor->fd = open(param->pathname, O_RDWR); if (descriptor->fd < 0) { printf("%s: Can't open device\n\r", __func__); + free(descriptor); return FAILURE; } @@ -192,6 +193,7 @@ int32_t spi_init(spi_desc **desc, const spi_init_param *param) descriptor->fd = open(param->pathname, O_RDWR); if (descriptor->fd < 0) { printf("%s: Can't open device\n\r", __func__); + free(descriptor); return FAILURE; } @@ -199,6 +201,8 @@ int32_t spi_init(spi_desc **desc, const spi_init_param *param) ¶m->mode); if (ret == -1) { printf("%s: Can't set mode\n\r", __func__); + close(descriptor->fd); + free(descriptor); return FAILURE; } @@ -206,6 +210,8 @@ int32_t spi_init(spi_desc **desc, const spi_init_param *param) ¶m->max_speed_hz); if (ret == -1) { printf("%s: Can't set speed\n\r", __func__); + close(descriptor->fd); + free(descriptor); return FAILURE; } @@ -285,6 +291,7 @@ int32_t gpio_get(gpio_desc **desc, fd = open("/sys/class/gpio/export", O_WRONLY); if (fd < 0) { printf("%s: Can't open device\n\r", __func__); + free(descriptor); return FAILURE; } @@ -292,12 +299,15 @@ int32_t gpio_get(gpio_desc **desc, ret = write(fd, buf, len); if (ret < 0) { printf("%s: Can't write to file\n\r", __func__); + close(fd); + free(descriptor); return FAILURE; } ret = close(fd); if (ret < 0) { printf("%s: Can't close device\n\r", __func__); + free(descriptor); return FAILURE; }