Patchwork [MTD] JFFS2: Missing verify buffer allocation/deallocation.

login
register
mail settings
Submitter massimo cirillo
Date Aug. 27, 2009, 8:44 a.m.
Message ID <62cbdcd90908270144v2e52e3ceg36c31abad3fced61@mail.gmail.com>
Download mbox | patch
Permalink /patch/32228/
State New, archived
Headers show

Comments

massimo cirillo - Aug. 27, 2009, 8:44 a.m.
From: Massimo Cirillo <maxcir@gmail.com>

The function jffs2_nor_wbuf_flash_setup() doesn't allocate the verify buffer
if CONFIG_JFFS2_FS_WBUF_VERIFY is defined, so causing a kernel panic when
that macro is enabled and the verify function is called. Similarly the
jffs2_nor_wbuf_flash_cleanup() must free the buffer if
CONFIG_JFFS2_FS_WBUF_VERIFY is enabled.
The following patch fixes the problem.
The following patch applies to 2.6.30 kernel.

Signed-off-by: Massimo Cirillo <maxcir@gmail.com>
---
Artem Bityutskiy - Sept. 1, 2009, 8:48 a.m.
On 08/27/2009 11:44 AM, massimo cirillo wrote:
> From: Massimo Cirillo<maxcir@gmail.com>
>
> The function jffs2_nor_wbuf_flash_setup() doesn't allocate the verify buffer
> if CONFIG_JFFS2_FS_WBUF_VERIFY is defined, so causing a kernel panic when
> that macro is enabled and the verify function is called. Similarly the
> jffs2_nor_wbuf_flash_cleanup() must free the buffer if
> CONFIG_JFFS2_FS_WBUF_VERIFY is enabled.
> The following patch fixes the problem.
> The following patch applies to 2.6.30 kernel.

Applied to l2-mtd-2.6.git. But please, do not send line-wrapped
patches.

Patch

diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
old mode 100644
new mode 100755
index d9a721e..5ef7bac
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -1268,10 +1268,20 @@  int jffs2_nor_wbuf_flash_setup(struct
jffs2_sb_info *c) {
 	if (!c->wbuf)
 		return -ENOMEM;

+#ifdef CONFIG_JFFS2_FS_WBUF_VERIFY
+	c->wbuf_verify = kmalloc(c->wbuf_pagesize, GFP_KERNEL);
+	if (!c->wbuf_verify) {
+		kfree(c->wbuf);
+		return -ENOMEM;
+	}
+#endif
 	return 0;
 }

 void jffs2_nor_wbuf_flash_cleanup(struct jffs2_sb_info *c) {
+#ifdef CONFIG_JFFS2_FS_WBUF_VERIFY
+	kfree(c->wbuf_verify);
+#endif
 	kfree(c->wbuf);
 }