From: Yue Tao <yue....@windriver.com>

[ CQID: WIND00366808 ]

The exif_convert_utf16_to_utf8 function in exif-entry.c in the EXIF
Tag Parsing Library (aka libexif) before 0.6.21 allows remote attackers
to cause a denial of service (out-of-bounds read) or possibly obtain
sensitive information from process memory via crafted EXIF tags in an image.

Signed-off-by: Yue Tao <yue....@windriver.com>
Signed-off-by: Robert Yang <liezhi.y...@windriver.com>
Signed-off-by: Mark Hatle <mark.ha...@windriver.com>
---
 .../libexif/0001-libexif-CVE-2012-2813.patch       | 33 ++++++++++++++++++++++
 meta/recipes-support/libexif/libexif_0.6.20.bb     |  5 +++-
 2 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 
meta/recipes-support/libexif/libexif/0001-libexif-CVE-2012-2813.patch

diff --git 
a/meta/recipes-support/libexif/libexif/0001-libexif-CVE-2012-2813.patch 
b/meta/recipes-support/libexif/libexif/0001-libexif-CVE-2012-2813.patch
new file mode 100644
index 0000000..fbd0442
--- /dev/null
+++ b/meta/recipes-support/libexif/libexif/0001-libexif-CVE-2012-2813.patch
@@ -0,0 +1,33 @@
+Index: libexif/exif-entry.c
+===================================================================
+RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v
+retrieving revision 1.146
+retrieving revision 1.147
+diff -c -u -r1.146 -r1.147
+--- a/libexif/exif-entry.c     12 Jul 2012 17:10:34 -0000      1.146
++++ b/libexif/exif-entry.c     12 Jul 2012 17:12:24 -0000      1.147
+@@ -1346,10 +1346,23 @@
+       case EXIF_TAG_XP_AUTHOR:
+       case EXIF_TAG_XP_KEYWORDS:
+       case EXIF_TAG_XP_SUBJECT:
++      {
++              /* Sanity check the size to prevent overflow */
++              if (e->size+sizeof(unsigned short) < e->size) break;
++
++              /* The tag may not be U+0000-terminated , so make a local
++                 U+0000-terminated copy before converting it */
++              unsigned short *utf16 = exif_mem_alloc (e->priv->mem, 
e->size+sizeof(unsigned short));
++              if (!utf16) break;
++              memcpy(utf16, e->data, e->size);
++              utf16[e->size/sizeof(unsigned short)] = 0;
++
+               /* Warning! The texts are converted from UTF16 to UTF8 */
+               /* FIXME: use iconv to convert into the locale encoding */
+-              exif_convert_utf16_to_utf8(val, (unsigned short*)e->data, 
MIN(maxlen, e->size));
++              exif_convert_utf16_to_utf8(val, utf16, maxlen);
++              exif_mem_free(e->priv->mem, utf16);
+               break;
++      }
+ 
+       default:
+               /* Use a generic value formatting */
diff --git a/meta/recipes-support/libexif/libexif_0.6.20.bb 
b/meta/recipes-support/libexif/libexif_0.6.20.bb
index f233d3f..a1a1816 100644
--- a/meta/recipes-support/libexif/libexif_0.6.20.bb
+++ b/meta/recipes-support/libexif/libexif_0.6.20.bb
@@ -4,7 +4,10 @@ SECTION = "libs"
 LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
 
-SRC_URI = "${SOURCEFORGE_MIRROR}/libexif/libexif-${PV}.tar.bz2"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libexif/libexif-${PV}.tar.bz2 \
+         file://0001-libexif-CVE-2012-2813.patch"
 
 SRC_URI[md5sum] = "19844ce6b5d075af16f0d45de1e8a6a3"
 SRC_URI[sha256sum] = 
"a772d20bd8fb9802d7f0d70fde6ac8872f87d0c66c52b0d14026dafcaa83d715"
-- 
1.8.1.2.545.g2f19ada


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to