|
@@ -0,0 +1,39 @@
|
|
|
+Subject: The cdf_read_short_sector function allows remote attackers to cause a denial of service
|
|
|
+ID: CVE-2014-0207
|
|
|
+Author: Christos Zoulas <christos@zoulas.com>
|
|
|
+Date: Mon May 5 16:11:21 2014 +0000
|
|
|
+Origin:
|
|
|
+ commit 6d209c1c489457397a5763bca4b28e43aac90391
|
|
|
+Debian-Author: Holger Levsen <holger@debian.org>
|
|
|
+Comment:
|
|
|
+ made apply cleanly based on [origin], removed all modifications to
|
|
|
+ src/readcdf.c (for CVE-2012-1571) as the problematic code was
|
|
|
+ introduced later.
|
|
|
+Reviewed-By: Christoph Biedl <debian.axhn@manchmal.in-ulm.de>
|
|
|
+Last-Update: 2014-09-07
|
|
|
+
|
|
|
+ Apply patches from file-CVE-2012-1571.patch
|
|
|
+ From Francisco Alonso Espejo:
|
|
|
+ file < 5.18/git version can be made to crash when checking some
|
|
|
+ corrupt CDF files (Using an invalid cdf_read_short_sector size)
|
|
|
+ The problem I found here, is that in most situations (if
|
|
|
+ h_short_sec_size_p2 > 8) because the blocksize is 512 and normal
|
|
|
+ values are 06 which means reading 64 bytes.As long as the check
|
|
|
+ for the block size copy is not checked properly (there's an assert
|
|
|
+ that makes wrong/invalid assumptions)
|
|
|
+
|
|
|
+--- a/src/cdf.c
|
|
|
++++ b/src/cdf.c
|
|
|
+@@ -355,10 +355,10 @@
|
|
|
+ size_t ss = CDF_SHORT_SEC_SIZE(h);
|
|
|
+ size_t pos = CDF_SHORT_SEC_POS(h, id);
|
|
|
+ assert(ss == len);
|
|
|
+- if (pos > CDF_SEC_SIZE(h) * sst->sst_len) {
|
|
|
++ if (pos + len > CDF_SEC_SIZE(h) * sst->sst_len) {
|
|
|
+ DPRINTF(("Out of bounds read %" SIZE_T_FORMAT "u > %"
|
|
|
+ SIZE_T_FORMAT "u\n",
|
|
|
+- pos, CDF_SEC_SIZE(h) * sst->sst_len));
|
|
|
++ pos + len, CDF_SEC_SIZE(h) * sst->sst_len));
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ (void)memcpy(((char *)buf) + offs,
|