Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24 /fs/hfs/brec.c

Filename:/fs/hfs/brec.c
Lines Added:13
Lines Deleted:2
Also changed in: (Previous) 2.6.24-rc8  2.6.24-rc7-git8  2.6.24-rc7-git7  2.6.24-rc7-git6  2.6.24-rc7-git5  2.6.24-rc7-git4 
(Following) 2.6.24-git16  2.6.24-git17  2.6.24-git18  2.6.24-git19  2.6.24-git20  2.6.24-git21 

Location
[  2.6.24
  [  fs
    [  hfs
       o  brec.c

Patch

diff --git a/fs/hfs/brec.c b/fs/hfs/brec.c
index 5c87cf4..8626ee3 100644
--- a/fs/hfs/brec.c
+++ b/fs/hfs/brec.c
@@ -44,10 +44,21 @@ u16 hfs_brec_keylen(struct hfs_bnode *node, u16 rec)
       recoff = hfs_bnode_read_u16(node, node->tree->node_size - (rec + 1) * 2);
       if (!recoff)
          return 0;
-      if (node->tree->attributes & HFS_TREE_BIGKEYS)
+      if (node->tree->attributes & HFS_TREE_BIGKEYS) {
          retval = hfs_bnode_read_u16(node, recoff) + 2;
-      else
+         if (retval > node->tree->max_key_len + 2) {
+            printk(KERN_ERR "hfs: keylen %d too large\n",
+               retval);
+            retval = HFS_BAD_KEYLEN;
+         }
+      } else {
          retval = (hfs_bnode_read_u8(node, recoff) | 1) + 1;
+         if (retval > node->tree->max_key_len + 1) {
+            printk(KERN_ERR "hfs: keylen %d too large\n",
+               retval);
+            retval = HFS_BAD_KEYLEN;
+         }
+      }
    }
    return retval;
 }


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.