Commit b3edc346 authored by Stanley Chang's avatar Stanley Chang Committed by Chanwoo Choi
Browse files

extcon: realtek: add the error handler for nvmem_cell_read

There are following smatch warning:
drivers/extcon/extcon-rtk-type-c.c:905 __updated_type_c_parameter_by_efuse()
error: 'buf' dereferencing possible ERR_PTR()

The nvmem_cell_read may fail to read. So, driver must handle failure cases.

Link: https://lore.kernel.org/all/20231016053510.28881-1-stanley_chang@realtek.com/



Fixes: 8a590d73 ("extcon: add Realtek DHC RTD SoC Type-C driver")
Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/all/a469dd51-f5d5-4e8f-ba36-6c7cea046fb8@moroto.mountain/


Signed-off-by: default avatarStanley Chang <stanley_chang@realtek.com>
Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
parent da886ba8
Loading
Loading
Loading
Loading
+44 −42
Original line number Diff line number Diff line
@@ -901,7 +901,7 @@ static int __updated_type_c_parameter_by_efuse(struct type_c_data *type_c)
		int value_mask = (BIT(value_size) - 1);

		buf = nvmem_cell_read(cell, &buf_size);

		if (!IS_ERR(buf)) {
			cc1_0p2v = get_value((buf[0] >> value_size * 0) & value_mask);
			cc1_0p8v = get_value((buf[0] >> value_size * 1) & value_mask);
			cc1_2p6v = get_value((buf[1] >> value_size * 0) & value_mask);
@@ -920,6 +920,7 @@ static int __updated_type_c_parameter_by_efuse(struct type_c_data *type_c)
			cc2_12k = get_value((buf[7] >> value_size * 1) & value_mask);

			kfree(buf);
		}
		nvmem_cell_put(cell);
	}

@@ -984,7 +985,7 @@ static int __updated_type_c_parameter_by_efuse_v2(struct type_c_data *type_c)
		int value_mask = (BIT(value_size) - 1);

		buf = nvmem_cell_read(cell, &buf_size);

		if (!IS_ERR(buf)) {
			value_size = 5;
			value_mask = (BIT(value_size) - 1);
			cc1_4p7k = buf[0] & value_mask;
@@ -1007,6 +1008,7 @@ static int __updated_type_c_parameter_by_efuse_v2(struct type_c_data *type_c)
			cc2_2p6v = (buf[8] >> value_size * 1) & value_mask;

			kfree(buf);
		}
		nvmem_cell_put(cell);
	}