X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fisofs%2Fcompress.c;h=3a39158cca964384e12d73bdbf9b4f7b84c645c6;hb=fffcb480e4224f25c965b93fa65541bfc7dd732e;hp=34a44e451689afd59aa30449b56f938bd0109f60;hpb=94f2f715771d0aa5554451d1e2a920f11b8be3fe;p=linux-2.6 diff --git a/fs/isofs/compress.c b/fs/isofs/compress.c index 34a44e4516..3a39158cca 100644 --- a/fs/isofs/compress.c +++ b/fs/isofs/compress.c @@ -129,8 +129,14 @@ static int zisofs_readpage(struct file *file, struct page *page) 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 @@ -306,7 +312,7 @@ eio: return err; } -struct address_space_operations zisofs_aops = { +const struct address_space_operations zisofs_aops = { .readpage = zisofs_readpage, /* No sync_page operation supported? */ /* No bmap operation supported */