Skip to content

Commit

Permalink
iio: dummy: iio_simple_dummy: check the return value of kstrdup()
Browse files Browse the repository at this point in the history
[ Upstream commit ba93642 ]

kstrdup() is also a memory allocation-related function, it returns NULL
when some memory errors happen. So it is better to check the return
value of it so to catch the memory error in time. Besides, there should
have a kfree() to clear up the allocation if we get a failure later in
this function to prevent memory leak.

Signed-off-by: Xiaoke Wang <xkernel.wang@foxmail.com>
Link: https://lore.kernel.org/r/tencent_C920CFCC33B9CC1C63141FE1334A39FF8508@qq.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
x2018 authored and gregkh committed Jun 14, 2022
1 parent f091e29 commit 8caa4b7
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions drivers/iio/dummy/iio_simple_dummy.c
Original file line number Diff line number Diff line change
Expand Up @@ -575,10 +575,9 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)
*/

swd = kzalloc(sizeof(*swd), GFP_KERNEL);
if (!swd) {
ret = -ENOMEM;
goto error_kzalloc;
}
if (!swd)
return ERR_PTR(-ENOMEM);

/*
* Allocate an IIO device.
*
Expand All @@ -590,7 +589,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)
indio_dev = iio_device_alloc(parent, sizeof(*st));
if (!indio_dev) {
ret = -ENOMEM;
goto error_ret;
goto error_free_swd;
}

st = iio_priv(indio_dev);
Expand All @@ -616,6 +615,10 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)
* indio_dev->name = spi_get_device_id(spi)->name;
*/
indio_dev->name = kstrdup(name, GFP_KERNEL);
if (!indio_dev->name) {
ret = -ENOMEM;
goto error_free_device;
}

/* Provide description of available channels */
indio_dev->channels = iio_dummy_channels;
Expand All @@ -632,7 +635,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)

ret = iio_simple_dummy_events_register(indio_dev);
if (ret < 0)
goto error_free_device;
goto error_free_name;

ret = iio_simple_dummy_configure_buffer(indio_dev);
if (ret < 0)
Expand All @@ -649,11 +652,12 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)
iio_simple_dummy_unconfigure_buffer(indio_dev);
error_unregister_events:
iio_simple_dummy_events_unregister(indio_dev);
error_free_name:
kfree(indio_dev->name);
error_free_device:
iio_device_free(indio_dev);
error_ret:
error_free_swd:
kfree(swd);
error_kzalloc:
return ERR_PTR(ret);
}

Expand Down

0 comments on commit 8caa4b7

Please sign in to comment.