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

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

Advertisement

Kernel v2.6.24 /fs/cramfs/inode.c

Filename:/fs/cramfs/inode.c
Lines Added:14
Lines Deleted:6
Also changed in: (Previous) 2.6.24-rc8  2.6.24-rc7  2.6.24-rc6  2.6.24-rc5  2.6.24-rc4  2.6.24-rc3 
(Following) 2.6.25-git3  2.6.25-git4  2.6.25-git5  2.6.25-git6  2.6.25-git7  2.6.25-git8 

Location
[  2.6.24
  [  fs
    [  cramfs
       o  inode.c

Patch

diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index 3d194a2..350680f 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -148,7 +148,7 @@ static void *cramfs_read(struct super_block *sb, unsigned int offset, unsigned i
 {
    struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping;
    struct page *pages[BLKS_PER_BUF];
-   unsigned i, blocknr, buffer, unread;
+   unsigned i, blocknr, buffer;
    unsigned long devsize;
    char *data;
 
@@ -175,7 +175,6 @@ static void *cramfs_read(struct super_block *sb, unsigned int offset, unsigned i
    devsize = mapping->host->i_size >> PAGE_CACHE_SHIFT;
 
    /* Ok, read in BLKS_PER_BUF pages completely first. */
-   unread = 0;
    for (i = 0; i < BLKS_PER_BUF; i++) {
       struct page *page = NULL;
 
@@ -258,12 +257,21 @@ static int cramfs_fill_super(struct super_block *sb, void *data, int silent)
 
    /* Do sanity checks on the superblock */
    if (super.magic != CRAMFS_MAGIC) {
+      /* check for wrong endianess */
+      if (super.magic == CRAMFS_MAGIC_WEND) {
+         if (!silent)
+            printk(KERN_ERR "cramfs: wrong endianess\n");
+         goto out;
+      }
+
       /* check at 512 byte offset */
       mutex_lock(&read_mutex);
       memcpy(&super, cramfs_read(sb, 512, sizeof(super)), sizeof(super));
       mutex_unlock(&read_mutex);
       if (super.magic != CRAMFS_MAGIC) {
-         if (!silent)
+         if (super.magic == CRAMFS_MAGIC_WEND && !silent)
+            printk(KERN_ERR "cramfs: wrong endianess\n");
+         else if (!silent)
             printk(KERN_ERR "cramfs: wrong magic\n");
          goto out;
       }
@@ -353,7 +361,7 @@ static int cramfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
    if (offset & 3)
       return -EINVAL;
 
-   buf = kmalloc(256, GFP_KERNEL);
+   buf = kmalloc(CRAMFS_MAXPATHLEN, GFP_KERNEL);
    if (!buf)
       return -ENOMEM;
 
@@ -367,7 +375,7 @@ static int cramfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
       int namelen, error;
 
       mutex_lock(&read_mutex);
-      de = cramfs_read(sb, OFFSET(inode) + offset, sizeof(*de)+256);
+      de = cramfs_read(sb, OFFSET(inode) + offset, sizeof(*de)+CRAMFS_MAXPATHLEN);
       name = (char *)(de+1);
 
       /*
@@ -417,7 +425,7 @@ static struct dentry * cramfs_lookup(struct inode *dir, struct dentry *dentry, s
       char *name;
       int namelen, retval;
 
-      de = cramfs_read(dir->i_sb, OFFSET(dir) + offset, sizeof(*de)+256);
+      de = cramfs_read(dir->i_sb, OFFSET(dir) + offset, sizeof(*de)+CRAMFS_MAXPATHLEN);
       name = (char *)(de+1);
 
       /* Try to take advantage of sorted directories */


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