[U-Boot] [PATCH 1/1] dm: usb: ehci: avoid possible NULL dereference

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Nov 20 14:39:35 UTC 2017



On 11/20/2017 01:47 AM, Marek Vasut wrote:
> On 11/19/2017 11:42 PM, Heinrich Schuchardt wrote:
>> It is unwise to first dereference a pointer and
>> afterwards to check if it was NULL.
> 
> The check is still incomplete, the hccr is not checked.

Thanks for reviewing.

Depending on CONFIG_DM_USB ctrl->hccr is set in ehci_register or in 
usb_lowlevel_init.

There are other functions (ehci_get_portsc_register, ehci_submit_root, 
ehci_common_init) on ctrl->hccr != NULL too.

Shouldn't we check(!ctrl || !ctrl->hcor || !ctrl->hccr) in ehci_register 
and usb_lowlevel_init instead of checking it in ehci_shutdown?

Best regards

Heinrich

> 
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> ---
>>   drivers/usb/host/ehci-hcd.c | 4 +++-
>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
>> index be3e842dcc..80bc8219af 100644
>> --- a/drivers/usb/host/ehci-hcd.c
>> +++ b/drivers/usb/host/ehci-hcd.c
>> @@ -208,11 +208,13 @@ static int ehci_shutdown(struct ehci_ctrl *ctrl)
>>   {
>>   	int i, ret = 0;
>>   	uint32_t cmd, reg;
>> -	int max_ports = HCS_N_PORTS(ehci_readl(&ctrl->hccr->cr_hcsparams));
>> +	int max_ports;
>>   
>>   	if (!ctrl || !ctrl->hcor)
>>   		return -EINVAL;
>>   
>> +	max_ports = HCS_N_PORTS(ehci_readl(&ctrl->hccr->cr_hcsparams));
>> +
>>   	cmd = ehci_readl(&ctrl->hcor->or_usbcmd);
>>   	/* If not run, directly return */
>>   	if (!(cmd & CMD_RUN))
>>
> 
> 


More information about the U-Boot mailing list