]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Jan 2013 17:33:49 +0000 (09:33 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Jan 2013 17:33:49 +0000 (09:33 -0800)
added patches:
ext4-fix-memory-leak-in-ext4_xattr_set_acl-s-error-path.patch
mfd-only-unregister-platform-devices-allocated-by-the-mfd-core.patch

queue-3.0/ext4-fix-memory-leak-in-ext4_xattr_set_acl-s-error-path.patch [new file with mode: 0644]
queue-3.0/mfd-only-unregister-platform-devices-allocated-by-the-mfd-core.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/ext4-fix-memory-leak-in-ext4_xattr_set_acl-s-error-path.patch b/queue-3.0/ext4-fix-memory-leak-in-ext4_xattr_set_acl-s-error-path.patch
new file mode 100644 (file)
index 0000000..54fbf30
--- /dev/null
@@ -0,0 +1,39 @@
+From 24ec19b0ae83a385ad9c55520716da671274b96c Mon Sep 17 00:00:00 2001
+From: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
+Date: Thu, 8 Nov 2012 15:11:11 -0500
+Subject: ext4: fix memory leak in ext4_xattr_set_acl()'s error path
+
+From: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
+
+commit 24ec19b0ae83a385ad9c55520716da671274b96c upstream.
+
+In ext4_xattr_set_acl(), if ext4_journal_start() returns an error,
+posix_acl_release() will not be called for 'acl' which may result in a
+memory leak.
+
+This patch fixes that.
+
+Reviewed-by: Lukas Czerner <lczerner@redhat.com>
+Signed-off-by: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ext4/acl.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/fs/ext4/acl.c
++++ b/fs/ext4/acl.c
+@@ -450,8 +450,10 @@ ext4_xattr_set_acl(struct dentry *dentry
+ retry:
+       handle = ext4_journal_start(inode, EXT4_DATA_TRANS_BLOCKS(inode->i_sb));
+-      if (IS_ERR(handle))
+-              return PTR_ERR(handle);
++      if (IS_ERR(handle)) {
++              error = PTR_ERR(handle);
++              goto release_and_out;
++      }
+       error = ext4_set_acl(handle, inode, type, acl);
+       ext4_journal_stop(handle);
+       if (error == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
diff --git a/queue-3.0/mfd-only-unregister-platform-devices-allocated-by-the-mfd-core.patch b/queue-3.0/mfd-only-unregister-platform-devices-allocated-by-the-mfd-core.patch
new file mode 100644 (file)
index 0000000..754a093
--- /dev/null
@@ -0,0 +1,68 @@
+From b9fbb62eb61452d728c39b2e5020739c575aac53 Mon Sep 17 00:00:00 2001
+From: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
+Date: Fri, 9 Nov 2012 16:15:28 +0000
+Subject: mfd: Only unregister platform devices allocated by the mfd core
+
+From: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
+
+commit b9fbb62eb61452d728c39b2e5020739c575aac53 upstream.
+
+mfd_remove_devices would iterate over all devices sharing a parent with
+an mfd device regardless of whether they were allocated by the mfd core
+or not. This especially caused problems when the device structure was
+not contained within a platform_device, because to_platform_device is
+used on each device pointer.
+
+This patch defines a device_type for mfd devices and checks this is
+present from mfd_remove_devices_fn before processing the device.
+
+Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
+Tested-by: Peter Tyser <ptyser@xes-inc.com>
+Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/mfd/mfd-core.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/mfd/mfd-core.c
++++ b/drivers/mfd/mfd-core.c
+@@ -18,6 +18,10 @@
+ #include <linux/pm_runtime.h>
+ #include <linux/slab.h>
++static struct device_type mfd_dev_type = {
++      .name   = "mfd_device",
++};
++
+ int mfd_cell_enable(struct platform_device *pdev)
+ {
+       const struct mfd_cell *cell = mfd_get_cell(pdev);
+@@ -87,6 +91,7 @@ static int mfd_add_device(struct device
+               goto fail_device;
+       pdev->dev.parent = parent;
++      pdev->dev.type = &mfd_dev_type;
+       if (cell->pdata_size) {
+               ret = platform_device_add_data(pdev,
+@@ -182,10 +187,16 @@ EXPORT_SYMBOL(mfd_add_devices);
+ static int mfd_remove_devices_fn(struct device *dev, void *c)
+ {
+-      struct platform_device *pdev = to_platform_device(dev);
+-      const struct mfd_cell *cell = mfd_get_cell(pdev);
++      struct platform_device *pdev;
++      const struct mfd_cell *cell;
+       atomic_t **usage_count = c;
++      if (dev->type != &mfd_dev_type)
++              return 0;
++
++      pdev = to_platform_device(dev);
++      cell = mfd_get_cell(pdev);
++
+       /* find the base address of usage_count pointers (for freeing) */
+       if (!*usage_count || (cell->usage_count < *usage_count))
+               *usage_count = cell->usage_count;
index e633fbe7b68108e0b341acdffa072d9c85234e77..38aa3108e78fb605a2cb27771f60c900c02e2887 100644 (file)
@@ -12,3 +12,5 @@ sata_promise-fix-hardreset-lockdep-error.patch
 libata-set-dma_mode-to-0xff-in-reset.patch
 libata-fix-null-pointer-dereference-on-disk-error.patch
 target-tcm_fc-fix-the-lockdep-warning-due-to-inconsistent-lock-state.patch
+mfd-only-unregister-platform-devices-allocated-by-the-mfd-core.patch
+ext4-fix-memory-leak-in-ext4_xattr_set_acl-s-error-path.patch