Skip to contentSkip to conversation

Input: atmel_mxt_ts: Fix random configuration load failure

PATCH New Martin Fuzzey 1 participant 1 message Feb 9, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Input: atmel_mxt_ts: Fix random configuration load failure

Sometimes configuration fails to load with:

Bad format: failed to parse object

This can occur because the firmware loader does not ensure that the configuration data is null terminated.

The scanf() therefore reads arbitrary garbage at the end of file. If one item of garbage happens to be parsable the error occurs.

By skipping control characters (line endings) before scanning each line rather than relying on the white space skipping of sscanf we correctly detect end of file.

---
 drivers/input/touchscreen/atmel_mxt_ts.c |    7 +++++++
 1 file changed, 7 insertions(+)
drivers/input/touchscreen/atmel_mxt_ts.c +7 -0
index 0666759..29f9b9d 100644
@@ -1086,6 +1086,13 @@ static int mxt_prepare_cfg_mem(struct mxt_data *data,
 	u8 val;
 
 	while (data_pos < cfg->size) {
+		if (cfg->data[data_pos] < 0x20) {
+			/* firmware loading does not ensure null termination
+			 * which is required by scanf */
+			 data_pos++;
+			 continue;
+		}
+
 		/* Read type, instance, length */
 		ret = sscanf(cfg->data + data_pos, "%x %x %x%n",
 			     &type, &instance, &size, &offset);