jfs: ensure symlinks are NUL-terminated
authorDave Kleikamp <shaggy@linux.vnet.ibm.com>
Tue, 16 Dec 2008 16:21:34 +0000 (10:21 -0600)
committerDave Kleikamp <shaggy@linux.vnet.ibm.com>
Tue, 16 Dec 2008 16:21:34 +0000 (10:21 -0600)
This is an alternate fix for a bug reported and fixed by Duane Griffin.

Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
Reported-by: Duane Griffin <duaneg@dghda.com>
fs/jfs/inode.c

index 210339784b56f98a29ca2d75e2c2cf082dae904a..b00ee9f05a0695f0a84814ae15320aaac1a58aa8 100644 (file)
@@ -59,8 +59,14 @@ struct inode *jfs_iget(struct super_block *sb, unsigned long ino)
                if (inode->i_size >= IDATASIZE) {
                        inode->i_op = &page_symlink_inode_operations;
                        inode->i_mapping->a_ops = &jfs_aops;
-               } else
+               } else {
                        inode->i_op = &jfs_symlink_inode_operations;
+                       /*
+                        * The inline data should be null-terminated, but
+                        * don't let on-disk corruption crash the kernel
+                        */
+                       JFS_IP(inode)->i_inline[inode->i_size] = '\0';
+               }
        } else {
                inode->i_op = &jfs_file_inode_operations;
                init_special_inode(inode, inode->i_mode, inode->i_rdev);