[poppler] [FYI] libopenjpeg crash (Re: A few vulnerabilitiess in libpoppler)
Albert Astals Cid
aacid at kde.org
Fri Oct 22 11:39:09 PDT 2010
A Divendres, 22 d'octubre de 2010, mpsuzuki at hiroshima-u.ac.jp va escriure:
> Hi,
>
> Among 16 pdftoppm crashes that I could reproduce, 10 crashes
> occur in libopenjpeg. The first invocation of libopenjpeg
> function made pdftoppm crashed, so pdftoppm cannot stand
> with such crash by checking errors returned from libopenjpeg.
>
> SIGSEGV.PC.0x29b.CODE.1.ADDR.0x29b.INSTR.[NOT_MMAPED].pdf
> SIGSEGV.PC.0x7ffff6ac3a04.CODE.1.ADDR.0x100643ad5.INSTR.cmp_word_[rcx],_0x0
> .pdf
> SIGSEGV.PC.0x7ffff7a6872c.CODE.1.ADDR.0x37006cc7f1.INSTR.mov_rax,_[rdi].pd
> f
> SIGSEGV.PC.0x7ffff7a69c00.CODE.1.ADDR.0x13fb684a78.INSTR.mov_rbx,_[rax+0x4
> 8].pdf
> SIGSEGV.PC.0x7ffff7a69cac.CODE.1.ADDR.0x1006ae195.INSTR.mov_eax,_[rbx].pdf
> SIGSEGV.PC.0x7ffff7a69f4c.CODE.1.ADDR.0x1006adff7.INSTR.mov_dword_[rsi+rdx
> *8+0x20],_0x0.pdf
> SIGSEGV.PC.0x7ffff7a6bcdf.CODE.1.ADDR.0x30.INSTR.mov_rsi,_[rax+0x30].pdf
> SIGSEGV.PC.0x7ffff7a6bfa0.CODE.1.ADDR.0x30.INSTR.mov_rsi,_[rax+0x30].pdf
> SIGSEGV.PC.0x7ffff7ad2f07.CODE.1.ADDR.0x100a1aae5.INSTR.mov_rax,_[rdi].pdf
> SIGSEGV.PC.0x7ffff7ad2f41.CODE.1.ADDR.0x1b000800a1.INSTR.mov_eax,_[rdi+0x2
> 0].pdf
>
> For detail, please check my valgrind log files on:
> http://home.hiroshima-u.ac.jp/~mpsuzuki/test-def_mps20101022b.tar.rz
> or
> http://home.hiroshima-u.ac.jp/~mpsuzuki/test-debug_mps20101023a.tar.rz
>
> Checking the source of libopenjpeg, I found that some broken
> JPEG2000 files can cause invalid pointer dereference issue.
> Following patch for libopenjpeg-1.3 can fix it.
Have you checked the svn branch? It fixed most of the problems i had with
openjpeg, just that when i asked if they were going to release 1.3.1 all i got
back were tumbleweeds.
> I will
> try to contact libopenjpeg developers.
Good luck with that.
Albert
>
> Regards,
> mpsuzuki
>
> diff -Burb openjpeg-1.3+dfsg.orig/libopenjpeg/j2k.c
> openjpeg-1.3+dfsg.mps/libopenjpeg/j2k.c ---
> openjpeg-1.3+dfsg.orig/libopenjpeg/j2k.c 2008-03-10 17:50:35.000000000
> +0900 +++ openjpeg-1.3+dfsg.mps/libopenjpeg/j2k.c 2010-10-23
> 02:14:03.637256788 +0900 @@ -1807,8 +1807,13 @@
> if (cstr_info)
> memset(cstr_info, 0, sizeof(opj_codestream_info_t));
>
> - /* create an empty image */
> + /* create an empty image: opj_image_create0() initializes nothing, */
> + /* clear comps is essential to free this image safely */
> image = opj_image_create0();
> + if (!image)
> + return NULL;
> + image->comps = 0;
> +
> j2k->image = image;
>
> j2k->state = J2K_STATE_MHSOC;
> @@ -1910,8 +1915,13 @@
>
> j2k->cio = cio;
>
> - /* create an empty image */
> + /* create an empty image: opj_image_create0() initializes nothing, */
> + /* clear comps is essential to free this image safely */
> image = opj_image_create0();
> + if (!image)
> + return NULL;
> + image->comps = 0;
> +
> j2k->image = image;
>
> j2k->state = J2K_STATE_MHSOC;
> diff -Burb openjpeg-1.3+dfsg.orig/libopenjpeg/jp2.c
> openjpeg-1.3+dfsg.mps/libopenjpeg/jp2.c ---
> openjpeg-1.3+dfsg.orig/libopenjpeg/jp2.c 2008-03-10 17:50:35.000000000
> +0900 +++ openjpeg-1.3+dfsg.mps/libopenjpeg/jp2.c 2010-10-23
> 01:49:19.830002886 +0900 @@ -561,6 +561,7 @@
> image = j2k_decode(jp2->j2k, cio, cstr_info);
> if(!image) {
> opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
> + return NULL;
> }
>
> /* Set Image Color Space */
> _______________________________________________
> poppler mailing list
> poppler at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/poppler
More information about the poppler
mailing list