At the 'err_request_irq' label, rc_unregister_device(rcdev) frees its
argument. So when we fall through to the 'err_gpio_request' label
further down and call rc_free_device(rcdev) then that's a double free.
Fix that by moving 'rcdev = NULL' from after the call to
rc_free_device() to after rc_unregister_device(). That fixes the
problem since rc_free_device() just does nothing if passed NULL and
there's no further use of 'rcdev' after the call to rc_free_device()
so it's not needed there.
Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
 err_request_irq:
        platform_set_drvdata(pdev, NULL);
        rc_unregister_device(rcdev);
+       rcdev = NULL;
 err_register_rc_device:
 err_gpio_direction_input:
        gpio_free(pdata->gpio_nr);
 err_gpio_request:
        rc_free_device(rcdev);
-       rcdev = NULL;
 err_allocate_device:
        kfree(gpio_dev);
        return rc;