diff options
Diffstat (limited to 'drivers/soc/qcom/mdt_loader.c')
| -rw-r--r-- | drivers/soc/qcom/mdt_loader.c | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c index 24cd193dec55..eba7f76f9d61 100644 --- a/drivers/soc/qcom/mdt_loader.c +++ b/drivers/soc/qcom/mdt_loader.c @@ -230,6 +230,14 @@ static int __qcom_mdt_load(struct device *dev, const struct firmware *fw,  			break;  		} +		if (phdr->p_filesz > phdr->p_memsz) { +			dev_err(dev, +				"refusing to load segment %d with p_filesz > p_memsz\n", +				i); +			ret = -EINVAL; +			break; +		} +  		ptr = mem_region + offset;  		if (phdr->p_filesz && phdr->p_offset < fw->size) { @@ -253,6 +261,15 @@ static int __qcom_mdt_load(struct device *dev, const struct firmware *fw,  				break;  			} +			if (seg_fw->size != phdr->p_filesz) { +				dev_err(dev, +					"failed to load segment %d from truncated file %s\n", +					i, fw_name); +				release_firmware(seg_fw); +				ret = -EINVAL; +				break; +			} +  			release_firmware(seg_fw);  		} | 
