Commit ba936421 authored by Xiaoke Wang's avatar Xiaoke Wang Committed by Jonathan Cameron
Browse files

iio: dummy: iio_simple_dummy: check the return value of kstrdup()



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: default avatarXiaoke Wang <xkernel.wang@foxmail.com>
Link: https://lore.kernel.org/r/tencent_C920CFCC33B9CC1C63141FE1334A39FF8508@qq.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 879a5237
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -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.
	 *
@@ -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);
@@ -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;
@@ -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)
@@ -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);
}