isofs: Fix unchecked printing of ER records
authorJan Kara <jack@suse.cz>
Thu, 18 Dec 2014 16:26:10 +0000 (17:26 +0100)
committersungmin ha <sungmin82.ha@samsung.com>
Wed, 18 Mar 2015 07:56:38 +0000 (16:56 +0900)
We didn't check length of rock ridge ER records before printing them.
Thus corrupted isofs image can cause us to access and print some memory
behind the buffer with obvious consequences.

Change-Id: I62169ef625a50321b3daa3127cfca63d449389b7
Reported-and-tested-by: Carl Henrik Lunde <chlunde@ping.uio.no>
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
fs/isofs/rock.c

index bb63254..735d752 100644 (file)
@@ -362,6 +362,9 @@ repeat:
                        rs.cont_size = isonum_733(rr->u.CE.size);
                        break;
                case SIG('E', 'R'):
+                       /* Invalid length of ER tag id? */
+                       if (rr->u.ER.len_id + offsetof(struct rock_ridge, u.ER.data) > rr->len)
+                               goto out;
                        ISOFS_SB(inode->i_sb)->s_rock = 1;
                        printk(KERN_DEBUG "ISO 9660 Extensions: ");
                        {