Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3dbc35a3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files


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: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org&gt;">

* 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
parents f5ad5010 474a8988
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -6471,6 +6471,7 @@ S: Odd Fixes
F:	drivers/staging/olpc_dcon/
F:	drivers/staging/olpc_dcon/


STAGING - OZMO DEVICES USB OVER WIFI DRIVER
STAGING - OZMO DEVICES USB OVER WIFI DRIVER
M:	Rupesh Gujare <rgujare@ozmodevices.com>
M:	Chris Kelly <ckelly@ozmodevices.com>
M:	Chris Kelly <ckelly@ozmodevices.com>
S:	Maintained
S:	Maintained
F:	drivers/staging/ozwpan/
F:	drivers/staging/ozwpan/
+2 −1
Original line number Original line Diff line number Diff line
@@ -27,13 +27,14 @@ config ANDROID_LOGGER


config ANDROID_PERSISTENT_RAM
config ANDROID_PERSISTENT_RAM
	bool
	bool
	depends on HAVE_MEMBLOCK
	select REED_SOLOMON
	select REED_SOLOMON
	select REED_SOLOMON_ENC8
	select REED_SOLOMON_ENC8
	select REED_SOLOMON_DEC8
	select REED_SOLOMON_DEC8


config ANDROID_RAM_CONSOLE
config ANDROID_RAM_CONSOLE
	bool "Android RAM buffer console"
	bool "Android RAM buffer console"
	depends on !S390 && !UML
	depends on !S390 && !UML && HAVE_MEMBLOCK
	select ANDROID_PERSISTENT_RAM
	select ANDROID_PERSISTENT_RAM
	default n
	default n


+7 −4
Original line number Original line Diff line number Diff line
@@ -399,12 +399,12 @@ static __init
struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
{
{
	struct persistent_ram_zone *prz;
	struct persistent_ram_zone *prz;
	int ret;
	int ret = -ENOMEM;


	prz = kzalloc(sizeof(struct persistent_ram_zone), GFP_KERNEL);
	prz = kzalloc(sizeof(struct persistent_ram_zone), GFP_KERNEL);
	if (!prz) {
	if (!prz) {
		pr_err("persistent_ram: failed to allocate persistent ram zone\n");
		pr_err("persistent_ram: failed to allocate persistent ram zone\n");
		return ERR_PTR(-ENOMEM);
		goto err;
	}
	}


	INIT_LIST_HEAD(&prz->node);
	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);
	ret = persistent_ram_buffer_init(dev_name(dev), prz);
	if (ret) {
	if (ret) {
		pr_err("persistent_ram: failed to initialize buffer\n");
		pr_err("persistent_ram: failed to initialize buffer\n");
		return ERR_PTR(ret);
		goto err;
	}
	}


	prz->ecc = ecc;
	prz->ecc = ecc;
	ret = persistent_ram_init_ecc(prz, prz->buffer_size);
	ret = persistent_ram_init_ecc(prz, prz->buffer_size);
	if (ret)
	if (ret)
		return ERR_PTR(ret);
		goto err;


	if (prz->buffer->sig == PERSISTENT_RAM_SIG) {
	if (prz->buffer->sig == PERSISTENT_RAM_SIG) {
		if (buffer_size(prz) > prz->buffer_size ||
		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);
	atomic_set(&prz->buffer->size, 0);


	return prz;
	return prz;
err:
	kfree(prz);
	return ERR_PTR(ret);
}
}


struct persistent_ram_zone * __init
struct persistent_ram_zone * __init
+15 −12
Original line number Original line Diff line number Diff line
@@ -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_platform_data *pdata = pdev->dev.platform_data;
	struct timed_gpio *cur_gpio;
	struct timed_gpio *cur_gpio;
	struct timed_gpio_data *gpio_data, *gpio_dat;
	struct timed_gpio_data *gpio_data, *gpio_dat;
	int i, j, ret = 0;
	int i, ret;


	if (!pdata)
	if (!pdata)
		return -EBUSY;
		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.get_time = gpio_get_time;
		gpio_dat->dev.enable = gpio_enable;
		gpio_dat->dev.enable = gpio_enable;
		ret = gpio_request(cur_gpio->gpio, cur_gpio->name);
		ret = gpio_request(cur_gpio->gpio, cur_gpio->name);
		if (ret >= 0) {
			ret = timed_output_dev_register(&gpio_dat->dev);
		if (ret < 0)
		if (ret < 0)
				gpio_free(cur_gpio->gpio);
			goto err_out;
		}
		ret = timed_output_dev_register(&gpio_dat->dev);
		if (ret < 0) {
		if (ret < 0) {
			for (j = 0; j < i; j++) {
			gpio_free(cur_gpio->gpio);
				timed_output_dev_unregister(&gpio_data[i].dev);
			goto err_out;
				gpio_free(gpio_data[i].gpio);
			}
			kfree(gpio_data);
			return ret;
		}
		}


		gpio_dat->gpio = cur_gpio->gpio;
		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);
	platform_set_drvdata(pdev, gpio_data);


	return 0;
	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)
static int timed_gpio_remove(struct platform_device *pdev)
+1 −0
Original line number Original line Diff line number Diff line
@@ -82,6 +82,7 @@ int iio_map_array_unregister(struct iio_dev *indio_dev,
			ret = -ENODEV;
			ret = -ENODEV;
			goto error_ret;
			goto error_ret;
		}
		}
		i++;
	}
	}
error_ret:
error_ret:
	mutex_unlock(&iio_map_list_lock);
	mutex_unlock(&iio_map_list_lock);
Loading