Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / fs / isofs / compress.c
index 877b4e4..4917315 100644 (file)
 
 #include <linux/config.h>
 #include <linux/module.h>
-
-#include <linux/stat.h>
-#include <linux/time.h>
-#include <linux/iso_fs.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/slab.h>
-#include <linux/errno.h>
-#include <linux/cdrom.h>
 #include <linux/init.h>
-#include <linux/nls.h>
-#include <linux/ctype.h>
-#include <linux/smp_lock.h>
-#include <linux/blkdev.h>
+
 #include <linux/vmalloc.h>
 #include <linux/zlib.h>
-#include <linux/buffer_head.h>
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/semaphore.h>
 
+#include "isofs.h"
 #include "zisofs.h"
 
 /* This should probably be global. */
@@ -132,7 +114,7 @@ static int zisofs_readpage(struct file *file, struct page *page)
                        brelse(ptrbh[1]);
                goto eio;
        }
-       cstart = le32_to_cpu(*(u32 *)(bh->b_data + (blockptr & bufmask)));
+       cstart = le32_to_cpu(*(__le32 *)(bh->b_data + (blockptr & bufmask)));
 
        if ( indexblocks == 2 ) {
                /* We just crossed a block boundary.  Switch to the next block */
@@ -144,11 +126,17 @@ static int zisofs_readpage(struct file *file, struct page *page)
                        goto eio;
                }
        }
-       cend = le32_to_cpu(*(u32 *)(bh->b_data + (blockendptr & bufmask)));
+       cend = le32_to_cpu(*(__le32 *)(bh->b_data + (blockendptr & bufmask)));
        brelse(bh);
 
+       if (cstart > cend)
+               goto eio;
+               
        csize = cend-cstart;
 
+       if (csize > deflateBound(1UL << zisofs_block_shift))
+               goto eio;
+
        /* Now page[] contains an array of pages, any of which can be NULL,
           and the locks on which we hold.  We should now read the data and
           release the pages.  If the pages are NULL the decompressed data