diff --git a/platform/pwm/pwm_hi35xx_linux.c b/platform/pwm/pwm_hi35xx_linux.c index 68f1e7e35944c3ec84d250e2bd3b72a8f13f557b..19b97a60b2d9ea09da0ee08249e7f20b99b82f05 100644 --- a/platform/pwm/pwm_hi35xx_linux.c +++ b/platform/pwm/pwm_hi35xx_linux.c @@ -140,22 +140,26 @@ static int PwmProbe(struct platform_device *pdev) r = platform_get_resource(pdev, IORESOURCE_MEM, 0); chip->base = devm_ioremap_resource(&pdev->dev, r); if (IS_ERR(chip->base)) { + devm_kfree(&pdev->dev, chip); return PTR_ERR(chip->base); } chip->reg = (struct HiPwmRegs *)chip->base; chip->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(chip->clk)) { dev_err(&pdev->dev, "failed to get clock\n"); + devm_kfree(&pdev->dev, chip); return PTR_ERR(chip->clk); } ret = clk_prepare_enable(chip->clk); if (ret < 0) { dev_err(&pdev->dev, "failed to enable clock\n"); + devm_kfree(&pdev->dev, chip); return ret; } ret = pwmchip_add(&chip->chip); if (ret < 0) { dev_err(&pdev->dev, "failed to add PWM chip\n"); + devm_kfree(&pdev->dev, chip); return ret; } diff --git a/platform/uart/uart_adapter.c b/platform/uart/uart_adapter.c index 4a0925a3c1e5707a08fcb4957cda1ccee1350f22..2889f30ef3a0746240ba564794fb6ab835d18ca2 100644 --- a/platform/uart/uart_adapter.c +++ b/platform/uart/uart_adapter.c @@ -32,19 +32,20 @@ #define HDF_LOG_TAG hdf_uart_adapter #define UART_NAME_LEN 20 +#define UART_PATHNAME_LEN (UART_NAME_LEN + 15) static char g_driverName[UART_NAME_LEN]; static int32_t UartAdapterInit(struct UartHost *host) { - char name[UART_NAME_LEN] = {0}; + char name[UART_PATHNAME_LEN] = {0}; struct file *fp = NULL; mm_segment_t oldfs; if (host == NULL) { return HDF_ERR_INVALID_OBJECT; } - if (sprintf_s(name, UART_NAME_LEN - 1, "/dev/%s%d", g_driverName, host->num) < 0) { + if (sprintf_s(name, UART_PATHNAME_LEN - 1, "/dev/%s%d", g_driverName, host->num) < 0) { return HDF_FAILURE; } oldfs = get_fs(); @@ -497,7 +498,11 @@ static int32_t HdfUartInit(struct HdfDeviceObject *obj) return HDF_FAILURE; } g_driverName[UART_NAME_LEN - 1] = 0; - ret = memcpy_s(g_driverName, UART_NAME_LEN - 1, drName, strlen(drName)); + if (strlen(drName) > (UART_NAME_LEN - 1)) { + HDF_LOGE("%s: Illegal length of drName", __func__); + return HDF_FAILURE; + } + ret = memcpy_s(g_driverName, UART_NAME_LEN, drName, strlen(drName)); if (ret != EOK) { return HDF_FAILURE; }