[v2,01/14] bus/dpaa: fix null pointer dereference

Message ID 20200624122701.1369327-2-maxime.coquelin@redhat.com (mailing list archive)
State Superseded, archived
Delegated to: Maxime Coquelin
Headers
Series vDPA API and framework rework |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Maxime Coquelin June 24, 2020, 12:26 p.m. UTC
  This patches fixes a null pointer derefencing that happens
when the device string passed to the iterator is NULL. This
situation can happen when iterating on a class type.
For example:

RTE_DEV_FOREACH(dev, "class=eth", &dev_iter) {
    ...
}

Fixes: e79df833d3f6 ("bus/dpaa: support hotplug ops")
Cc: stable@dpdk.org
Cc: shreyansh.jain@nxp.com

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 drivers/bus/dpaa/dpaa_bus.c | 5 +++++
 1 file changed, 5 insertions(+)
  

Comments

Adrian Moreno June 26, 2020, 10:13 a.m. UTC | #1
On 6/24/20 2:26 PM, Maxime Coquelin wrote:
> This patches fixes a null pointer derefencing that happens
> when the device string passed to the iterator is NULL. This
> situation can happen when iterating on a class type.
> For example:
> 
> RTE_DEV_FOREACH(dev, "class=eth", &dev_iter) {
>     ...
> }
> 
> Fixes: e79df833d3f6 ("bus/dpaa: support hotplug ops")
> Cc: stable@dpdk.org
> Cc: shreyansh.jain@nxp.com
> 
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
>  drivers/bus/dpaa/dpaa_bus.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
> index d53fe6083a..216f38acd4 100644
> --- a/drivers/bus/dpaa/dpaa_bus.c
> +++ b/drivers/bus/dpaa/dpaa_bus.c
> @@ -703,6 +703,11 @@ dpaa_bus_dev_iterate(const void *start, const char *str,
>  	struct rte_dpaa_device *dev;
>  	char *dup, *dev_name = NULL;
>  
> +	if (str == NULL) {
> +		DPAA_BUS_DEBUG("No device string\n");
> +		return NULL;
> +	}
> +
nitpicky: technically the trailing "\n" is not needed. Feel free to ignore

>  	/* Expectation is that device would be name=device_name */
>  	if (strncmp(str, "name=", 5) != 0) {
>  		DPAA_BUS_DEBUG("Invalid device string (%s)\n", str);
> 

Acked-by: Adrián Moreno <amorenoz@redhat.com>
  
Maxime Coquelin June 26, 2020, 10:15 a.m. UTC | #2
On 6/26/20 12:13 PM, Adrian Moreno wrote:
> 
> 
> On 6/24/20 2:26 PM, Maxime Coquelin wrote:
>> This patches fixes a null pointer derefencing that happens
>> when the device string passed to the iterator is NULL. This
>> situation can happen when iterating on a class type.
>> For example:
>>
>> RTE_DEV_FOREACH(dev, "class=eth", &dev_iter) {
>>     ...
>> }
>>
>> Fixes: e79df833d3f6 ("bus/dpaa: support hotplug ops")
>> Cc: stable@dpdk.org
>> Cc: shreyansh.jain@nxp.com
>>
>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>> ---
>>  drivers/bus/dpaa/dpaa_bus.c | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
>> index d53fe6083a..216f38acd4 100644
>> --- a/drivers/bus/dpaa/dpaa_bus.c
>> +++ b/drivers/bus/dpaa/dpaa_bus.c
>> @@ -703,6 +703,11 @@ dpaa_bus_dev_iterate(const void *start, const char *str,
>>  	struct rte_dpaa_device *dev;
>>  	char *dup, *dev_name = NULL;
>>  
>> +	if (str == NULL) {
>> +		DPAA_BUS_DEBUG("No device string\n");
>> +		return NULL;
>> +	}
>> +
> nitpicky: technically the trailing "\n" is not needed. Feel free to ignore

Thanks, I'll fix while applying.

> 
>>  	/* Expectation is that device would be name=device_name */
>>  	if (strncmp(str, "name=", 5) != 0) {
>>  		DPAA_BUS_DEBUG("Invalid device string (%s)\n", str);
>>
> 
> Acked-by: Adrián Moreno <amorenoz@redhat.com>
>
  

Patch

diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
index d53fe6083a..216f38acd4 100644
--- a/drivers/bus/dpaa/dpaa_bus.c
+++ b/drivers/bus/dpaa/dpaa_bus.c
@@ -703,6 +703,11 @@  dpaa_bus_dev_iterate(const void *start, const char *str,
 	struct rte_dpaa_device *dev;
 	char *dup, *dev_name = NULL;
 
+	if (str == NULL) {
+		DPAA_BUS_DEBUG("No device string\n");
+		return NULL;
+	}
+
 	/* Expectation is that device would be name=device_name */
 	if (strncmp(str, "name=", 5) != 0) {
 		DPAA_BUS_DEBUG("Invalid device string (%s)\n", str);