jffs2: Fix long-standing bug with symlink garbage collection.
authorDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 16 Dec 2009 03:27:20 +0000 (03:27 +0000)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 16 Dec 2009 03:27:20 +0000 (03:27 +0000)
Ever since jffs2_garbage_collect_metadata() was first half-written in
February 2001, it's been broken on architectures where 'char' is signed.
When garbage collecting a symlink with target length above 127, the payload
length would end up negative, causing interesting and bad things to happen.

Cc: stable@kernel.org
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
fs/jffs2/gc.c

index 090c556ffed28c7861b957efacf30099716ac465..3b6f2fa12cff16df800dee5ebb9b89fe93698eb5 100644 (file)
@@ -700,7 +700,8 @@ static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_
        struct jffs2_raw_inode ri;
        struct jffs2_node_frag *last_frag;
        union jffs2_device_node dev;
-       char *mdata = NULL, mdatalen = 0;
+       char *mdata = NULL;
+       int mdatalen = 0;
        uint32_t alloclen, ilen;
        int ret;