Fixes all known CVEs. Various Makefile cleanups for consistency between packages. Added PIC explicitly (was implicit). Removed two extra features. Removed autoreconf and added PKG_BUILD_PARALLEL for faster compilation. Roughly matched host configure args with target ones. Signed-off-by: Rosen Penev <rosenp@gmail.com>lilik-openwrt-22.03
@ -1,120 +0,0 @@ | |||||
From e03553605b45c88f0b4b2980adfbbb8f6fca2fd6 Mon Sep 17 00:00:00 2001 | |||||
From: Nick Wellnhofer <wellnhofer@aevum.de> | |||||
Date: Sun, 24 Mar 2019 09:51:39 +0100 | |||||
Subject: [PATCH] Fix security framework bypass | |||||
xsltCheckRead and xsltCheckWrite return -1 in case of error but callers | |||||
don't check for this condition and allow access. With a specially | |||||
crafted URL, xsltCheckRead could be tricked into returning an error | |||||
because of a supposedly invalid URL that would still be loaded | |||||
succesfully later on. | |||||
Fixes #12. | |||||
Thanks to Felix Wilhelm for the report. | |||||
--- | |||||
libxslt/documents.c | 18 ++++++++++-------- | |||||
libxslt/imports.c | 9 +++++---- | |||||
libxslt/transform.c | 9 +++++---- | |||||
libxslt/xslt.c | 9 +++++---- | |||||
4 files changed, 25 insertions(+), 20 deletions(-) | |||||
diff --git a/libxslt/documents.c b/libxslt/documents.c | |||||
index 3f3a7312..4aad11bb 100644 | |||||
--- a/libxslt/documents.c | |||||
+++ b/libxslt/documents.c | |||||
@@ -296,10 +296,11 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) { | |||||
int res; | |||||
res = xsltCheckRead(ctxt->sec, ctxt, URI); | |||||
- if (res == 0) { | |||||
- xsltTransformError(ctxt, NULL, NULL, | |||||
- "xsltLoadDocument: read rights for %s denied\n", | |||||
- URI); | |||||
+ if (res <= 0) { | |||||
+ if (res == 0) | |||||
+ xsltTransformError(ctxt, NULL, NULL, | |||||
+ "xsltLoadDocument: read rights for %s denied\n", | |||||
+ URI); | |||||
return(NULL); | |||||
} | |||||
} | |||||
@@ -372,10 +373,11 @@ xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) { | |||||
int res; | |||||
res = xsltCheckRead(sec, NULL, URI); | |||||
- if (res == 0) { | |||||
- xsltTransformError(NULL, NULL, NULL, | |||||
- "xsltLoadStyleDocument: read rights for %s denied\n", | |||||
- URI); | |||||
+ if (res <= 0) { | |||||
+ if (res == 0) | |||||
+ xsltTransformError(NULL, NULL, NULL, | |||||
+ "xsltLoadStyleDocument: read rights for %s denied\n", | |||||
+ URI); | |||||
return(NULL); | |||||
} | |||||
} | |||||
diff --git a/libxslt/imports.c b/libxslt/imports.c | |||||
index 874870cc..3783b247 100644 | |||||
--- a/libxslt/imports.c | |||||
+++ b/libxslt/imports.c | |||||
@@ -130,10 +130,11 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) { | |||||
int secres; | |||||
secres = xsltCheckRead(sec, NULL, URI); | |||||
- if (secres == 0) { | |||||
- xsltTransformError(NULL, NULL, NULL, | |||||
- "xsl:import: read rights for %s denied\n", | |||||
- URI); | |||||
+ if (secres <= 0) { | |||||
+ if (secres == 0) | |||||
+ xsltTransformError(NULL, NULL, NULL, | |||||
+ "xsl:import: read rights for %s denied\n", | |||||
+ URI); | |||||
goto error; | |||||
} | |||||
} | |||||
diff --git a/libxslt/transform.c b/libxslt/transform.c | |||||
index 13793914..0636dbd0 100644 | |||||
--- a/libxslt/transform.c | |||||
+++ b/libxslt/transform.c | |||||
@@ -3493,10 +3493,11 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, | |||||
*/ | |||||
if (ctxt->sec != NULL) { | |||||
ret = xsltCheckWrite(ctxt->sec, ctxt, filename); | |||||
- if (ret == 0) { | |||||
- xsltTransformError(ctxt, NULL, inst, | |||||
- "xsltDocumentElem: write rights for %s denied\n", | |||||
- filename); | |||||
+ if (ret <= 0) { | |||||
+ if (ret == 0) | |||||
+ xsltTransformError(ctxt, NULL, inst, | |||||
+ "xsltDocumentElem: write rights for %s denied\n", | |||||
+ filename); | |||||
xmlFree(URL); | |||||
xmlFree(filename); | |||||
return; | |||||
diff --git a/libxslt/xslt.c b/libxslt/xslt.c | |||||
index 780a5ad7..a234eb79 100644 | |||||
--- a/libxslt/xslt.c | |||||
+++ b/libxslt/xslt.c | |||||
@@ -6763,10 +6763,11 @@ xsltParseStylesheetFile(const xmlChar* filename) { | |||||
int res; | |||||
res = xsltCheckRead(sec, NULL, filename); | |||||
- if (res == 0) { | |||||
- xsltTransformError(NULL, NULL, NULL, | |||||
- "xsltParseStylesheetFile: read rights for %s denied\n", | |||||
- filename); | |||||
+ if (res <= 0) { | |||||
+ if (res == 0) | |||||
+ xsltTransformError(NULL, NULL, NULL, | |||||
+ "xsltParseStylesheetFile: read rights for %s denied\n", | |||||
+ filename); | |||||
return(NULL); | |||||
} | |||||
} | |||||
-- | |||||
2.18.1 | |||||
@ -1,29 +0,0 @@ | |||||
From c5eb6cf3aba0af048596106ed839b4ae17ecbcb1 Mon Sep 17 00:00:00 2001 | |||||
From: Nick Wellnhofer <wellnhofer@aevum.de> | |||||
Date: Sat, 27 Apr 2019 11:19:48 +0200 | |||||
Subject: [PATCH] Fix uninitialized read of xsl:number token | |||||
Found by OSS-Fuzz. | |||||
--- | |||||
libxslt/numbers.c | 5 ++++- | |||||
1 file changed, 4 insertions(+), 1 deletion(-) | |||||
diff --git a/libxslt/numbers.c b/libxslt/numbers.c | |||||
index 89e1f668..75c31eba 100644 | |||||
--- a/libxslt/numbers.c | |||||
+++ b/libxslt/numbers.c | |||||
@@ -382,7 +382,10 @@ xsltNumberFormatTokenize(const xmlChar *format, | |||||
tokens->tokens[tokens->nTokens].token = val - 1; | |||||
ix += len; | |||||
val = xmlStringCurrentChar(NULL, format+ix, &len); | |||||
- } | |||||
+ } else { | |||||
+ tokens->tokens[tokens->nTokens].token = (xmlChar)'0'; | |||||
+ tokens->tokens[tokens->nTokens].width = 1; | |||||
+ } | |||||
} else if ( (val == (xmlChar)'A') || | |||||
(val == (xmlChar)'a') || | |||||
(val == (xmlChar)'I') || | |||||
-- | |||||
2.21.0 | |||||
@ -1,71 +0,0 @@ | |||||
From 6ce8de69330783977dd14f6569419489875fb71b Mon Sep 17 00:00:00 2001 | |||||
From: Nick Wellnhofer <wellnhofer@aevum.de> | |||||
Date: Mon, 3 Jun 2019 13:14:45 +0200 | |||||
Subject: [PATCH] Fix uninitialized read with UTF-8 grouping chars | |||||
The character type in xsltFormatNumberConversion was too narrow and | |||||
an invalid character/length combination could be passed to | |||||
xsltNumberFormatDecimal, resulting in an uninitialized read. | |||||
Found by OSS-Fuzz. | |||||
--- | |||||
libxslt/numbers.c | 5 +++-- | |||||
tests/docs/bug-222.xml | 1 + | |||||
tests/general/bug-222.out | 2 ++ | |||||
tests/general/bug-222.xsl | 6 ++++++ | |||||
4 files changed, 12 insertions(+), 2 deletions(-) | |||||
create mode 100644 tests/docs/bug-222.xml | |||||
create mode 100644 tests/general/bug-222.out | |||||
create mode 100644 tests/general/bug-222.xsl | |||||
diff --git a/libxslt/numbers.c b/libxslt/numbers.c | |||||
index f1ed8846..20b99d5a 100644 | |||||
--- a/libxslt/numbers.c | |||||
+++ b/libxslt/numbers.c | |||||
@@ -1298,13 +1298,14 @@ OUTPUT_NUMBER: | |||||
number = floor((scale * number + 0.5)) / scale; | |||||
if ((self->grouping != NULL) && | |||||
(self->grouping[0] != 0)) { | |||||
+ int gchar; | |||||
len = xmlStrlen(self->grouping); | |||||
- pchar = xsltGetUTF8Char(self->grouping, &len); | |||||
+ gchar = xsltGetUTF8Char(self->grouping, &len); | |||||
xsltNumberFormatDecimal(buffer, floor(number), self->zeroDigit[0], | |||||
format_info.integer_digits, | |||||
format_info.group, | |||||
- pchar, len); | |||||
+ gchar, len); | |||||
} else | |||||
xsltNumberFormatDecimal(buffer, floor(number), self->zeroDigit[0], | |||||
format_info.integer_digits, | |||||
diff --git a/tests/docs/bug-222.xml b/tests/docs/bug-222.xml | |||||
new file mode 100644 | |||||
index 00000000..69d62f2c | |||||
--- /dev/null | |||||
+++ b/tests/docs/bug-222.xml | |||||
@@ -0,0 +1 @@ | |||||
+<doc/> | |||||
diff --git a/tests/general/bug-222.out b/tests/general/bug-222.out | |||||
new file mode 100644 | |||||
index 00000000..e3139698 | |||||
--- /dev/null | |||||
+++ b/tests/general/bug-222.out | |||||
@@ -0,0 +1,2 @@ | |||||
+<?xml version="1.0"?> | |||||
+1⠢0 | |||||
diff --git a/tests/general/bug-222.xsl b/tests/general/bug-222.xsl | |||||
new file mode 100644 | |||||
index 00000000..e32dc473 | |||||
--- /dev/null | |||||
+++ b/tests/general/bug-222.xsl | |||||
@@ -0,0 +1,6 @@ | |||||
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
+ <xsl:decimal-format name="f" grouping-separator="⠢"/> | |||||
+ <xsl:template match="/"> | |||||
+ <xsl:value-of select="format-number(10,'#⠢0','f')"/> | |||||
+ </xsl:template> | |||||
+</xsl:stylesheet> | |||||
-- | |||||
2.21.0 | |||||