In function map_array_register() properly rewind in case of error. Furthermore remove the now superfluous initialization of "ret" with 0. Signed-off-by: Lino Sanfilippo <LinoSanfilippo@xxxxxx> --- drivers/iio/inkern.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index 5a8351c..9dedc30 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c @@ -26,7 +26,7 @@ static DEFINE_MUTEX(iio_map_list_lock); int iio_map_array_register(struct iio_dev *indio_dev, struct iio_map *maps) { - int i = 0, ret = 0; + int i = 0, ret; struct iio_map_internal *mapi; if (maps == NULL) @@ -44,7 +44,18 @@ int iio_map_array_register(struct iio_dev *indio_dev, struct iio_map *maps) list_add_tail(&mapi->l, &iio_map_list); i++; } + mutex_unlock(&iio_map_list_lock); + + return 0; + error_ret: + /* undo */ + while (i--) { + mapi = list_last_entry(&iio_map_list, struct iio_map_internal, + l); + list_del(&mapi->l); + kfree(mapi); + } mutex_unlock(&iio_map_list_lock); return ret; -- 2.7.4