Merge tag 'staging-3.4-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging tree fixes from Greg KH: "Here are a number of bugfixes for the drivers/staging/ portion of the kernel that have been reported recently. Nothing major here, with maybe the exception of the ramster code can now be built so it is enabled in the build again, and lots of memory leaks that people like to have fixed on their systems. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" * tag 'staging-3.4-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: staging: android: fix mem leaks in __persistent_ram_init() staging: vt6656: Don't leak memory in drivers/staging/vt6656/ioctl.c::private_ioctl() staging: iio: hmc5843: Fix crash in probe function. staging/xgifb: fix display on XGI Volari Z11m cards Staging: android: timed_gpio: Fix resource leak in timed_gpio_probe error paths android: make persistent_ram based drivers depend on HAVE_MEMBLOCK staging: iio: ak8975: Remove i2c client data corruption staging: drm/omap: move where DMM driver is registered staging: zsmalloc: fix memory leak Staging: rts_pstor: off by one in for loop staging: ozwpan: Added new maintainer for ozwpan staging:rts_pstor:Avoid "Bad target number" message when probing driver staging:rts_pstor:Fix possible panic by NULL pointer dereference Staging: vt6655-6: check keysize before memcpy() staging/media/as102: Don't call release_firmware() on uninitialized variable staging:iio:core add missing increment of loop index in iio_map_array_unregister() staging: ramster: unbreak my heart staging/vme: Fix module parameters staging: sep: Fix sign of error
This commit is contained in:
@@ -27,13 +27,14 @@ config ANDROID_LOGGER
|
||||
|
||||
config ANDROID_PERSISTENT_RAM
|
||||
bool
|
||||
depends on HAVE_MEMBLOCK
|
||||
select REED_SOLOMON
|
||||
select REED_SOLOMON_ENC8
|
||||
select REED_SOLOMON_DEC8
|
||||
|
||||
config ANDROID_RAM_CONSOLE
|
||||
bool "Android RAM buffer console"
|
||||
depends on !S390 && !UML
|
||||
depends on !S390 && !UML && HAVE_MEMBLOCK
|
||||
select ANDROID_PERSISTENT_RAM
|
||||
default n
|
||||
|
||||
|
||||
@@ -399,12 +399,12 @@ static __init
|
||||
struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
|
||||
{
|
||||
struct persistent_ram_zone *prz;
|
||||
int ret;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
prz = kzalloc(sizeof(struct persistent_ram_zone), GFP_KERNEL);
|
||||
if (!prz) {
|
||||
pr_err("persistent_ram: failed to allocate persistent ram zone\n");
|
||||
return ERR_PTR(-ENOMEM);
|
||||
goto err;
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&prz->node);
|
||||
@@ -412,13 +412,13 @@ struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
|
||||
ret = persistent_ram_buffer_init(dev_name(dev), prz);
|
||||
if (ret) {
|
||||
pr_err("persistent_ram: failed to initialize buffer\n");
|
||||
return ERR_PTR(ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
prz->ecc = ecc;
|
||||
ret = persistent_ram_init_ecc(prz, prz->buffer_size);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
goto err;
|
||||
|
||||
if (prz->buffer->sig == PERSISTENT_RAM_SIG) {
|
||||
if (buffer_size(prz) > prz->buffer_size ||
|
||||
@@ -442,6 +442,9 @@ struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
|
||||
atomic_set(&prz->buffer->size, 0);
|
||||
|
||||
return prz;
|
||||
err:
|
||||
kfree(prz);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
struct persistent_ram_zone * __init
|
||||
|
||||
@@ -85,7 +85,7 @@ static int timed_gpio_probe(struct platform_device *pdev)
|
||||
struct timed_gpio_platform_data *pdata = pdev->dev.platform_data;
|
||||
struct timed_gpio *cur_gpio;
|
||||
struct timed_gpio_data *gpio_data, *gpio_dat;
|
||||
int i, j, ret = 0;
|
||||
int i, ret;
|
||||
|
||||
if (!pdata)
|
||||
return -EBUSY;
|
||||
@@ -108,18 +108,12 @@ static int timed_gpio_probe(struct platform_device *pdev)
|
||||
gpio_dat->dev.get_time = gpio_get_time;
|
||||
gpio_dat->dev.enable = gpio_enable;
|
||||
ret = gpio_request(cur_gpio->gpio, cur_gpio->name);
|
||||
if (ret >= 0) {
|
||||
ret = timed_output_dev_register(&gpio_dat->dev);
|
||||
if (ret < 0)
|
||||
gpio_free(cur_gpio->gpio);
|
||||
}
|
||||
if (ret < 0)
|
||||
goto err_out;
|
||||
ret = timed_output_dev_register(&gpio_dat->dev);
|
||||
if (ret < 0) {
|
||||
for (j = 0; j < i; j++) {
|
||||
timed_output_dev_unregister(&gpio_data[i].dev);
|
||||
gpio_free(gpio_data[i].gpio);
|
||||
}
|
||||
kfree(gpio_data);
|
||||
return ret;
|
||||
gpio_free(cur_gpio->gpio);
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
gpio_dat->gpio = cur_gpio->gpio;
|
||||
@@ -131,6 +125,15 @@ static int timed_gpio_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, gpio_data);
|
||||
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
while (--i >= 0) {
|
||||
timed_output_dev_unregister(&gpio_data[i].dev);
|
||||
gpio_free(gpio_data[i].gpio);
|
||||
}
|
||||
kfree(gpio_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int timed_gpio_remove(struct platform_device *pdev)
|
||||
|
||||
Reference in New Issue
Block a user