Compare commits
No commits in common. 'c9' and 'c10-beta' have entirely different histories.
@ -1 +1 @@
|
||||
SOURCES/orc-0.4.31.tar.xz
|
||||
SOURCES/orc-0.4.39.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
5d714f43f6c8a5d909b5f483e2e70447d6fe478a SOURCES/orc-0.4.31.tar.xz
|
||||
111053607b2daf5c99474c483259bc7028223417 SOURCES/orc-0.4.39.tar.xz
|
||||
|
@ -1,102 +0,0 @@
|
||||
From 734766c2596b6ff940778f659bd664b3d72abd61 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Wed, 31 Jul 2024 11:12:48 +0200
|
||||
Subject: [PATCH] Use vasprintf() if available for error messages and otherwise
|
||||
vsnprintf()
|
||||
|
||||
vasprintf() is a GNU/BSD extension and would allocate as much memory as required
|
||||
on the heap, similar to g_strdup_printf(). It's ridiculous that such a function
|
||||
is still not provided as part of standard C.
|
||||
|
||||
If it's not available, use vsnprintf() to at least avoid stack/heap buffer
|
||||
overflows, which can lead to arbitrary code execution.
|
||||
|
||||
Thanks to Noriko Totsuka for reporting.
|
||||
|
||||
Fixes JVN#02030803 / JPCERT#92912620 / CVE-2024-40897
|
||||
Fixes #69
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/191>
|
||||
---
|
||||
meson.build | 1 +
|
||||
orc/orccompiler.c | 6 +++++-
|
||||
orc/orcparse.c | 18 +++++++++++++++---
|
||||
3 files changed, 21 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 41d5e5b..0e0d83b 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -118,6 +118,7 @@ int main() {
|
||||
'''
|
||||
cdata.set('HAVE_MONOTONIC_CLOCK', cc.compiles(monotonic_test))
|
||||
cdata.set('HAVE_GETTIMEOFDAY', cc.has_function('gettimeofday'))
|
||||
+cdata.set('HAVE_VASPRINTF', cc.has_function('vasprintf'))
|
||||
cdata.set('HAVE_POSIX_MEMALIGN', cc.has_function('posix_memalign', prefix : '#include <stdlib.h>'))
|
||||
cdata.set('HAVE_MMAP', cc.has_function('mmap'))
|
||||
|
||||
diff --git a/orc/orccompiler.c b/orc/orccompiler.c
|
||||
index 8d92cbe..ea0853c 100644
|
||||
--- a/orc/orccompiler.c
|
||||
+++ b/orc/orccompiler.c
|
||||
@@ -1210,8 +1210,12 @@ orc_compiler_error_valist (OrcCompiler *compiler, const char *fmt,
|
||||
|
||||
if (compiler->error_msg) return;
|
||||
|
||||
+#ifdef HAVE_VASPRINTF
|
||||
+ vasprintf (&s, fmt, args);
|
||||
+#else
|
||||
s = malloc (ORC_COMPILER_ERROR_BUFFER_SIZE);
|
||||
- vsprintf (s, fmt, args);
|
||||
+ vsnprintf (s, ORC_COMPILER_ERROR_BUFFER_SIZE, fmt, args);
|
||||
+#endif
|
||||
compiler->error_msg = s;
|
||||
compiler->error = TRUE;
|
||||
compiler->result = ORC_COMPILE_RESULT_UNKNOWN_COMPILE;
|
||||
diff --git a/orc/orcparse.c b/orc/orcparse.c
|
||||
index f46b0be..56a9c3a 100644
|
||||
--- a/orc/orcparse.c
|
||||
+++ b/orc/orcparse.c
|
||||
@@ -401,9 +401,13 @@ opcode_arg_size (OrcStaticOpcode *opcode, int arg)
|
||||
static void
|
||||
orc_parse_log_valist (OrcParser *parser, const char *format, va_list args)
|
||||
{
|
||||
- char s[100];
|
||||
+#ifdef HAVE_VASPRINTF
|
||||
+ char *s;
|
||||
+#else
|
||||
+ char s[100] = { '\0' };
|
||||
+#endif
|
||||
int len;
|
||||
-
|
||||
+
|
||||
if (parser->error_program != parser->program) {
|
||||
sprintf(s, "In function %s:\n", parser->program->name);
|
||||
len = strlen(s);
|
||||
@@ -418,7 +422,11 @@ orc_parse_log_valist (OrcParser *parser, const char *format, va_list args)
|
||||
parser->error_program = parser->program;
|
||||
}
|
||||
|
||||
- vsprintf(s, format, args);
|
||||
+#ifdef HAVE_VASPRINTF
|
||||
+ vasprintf (&s, format, args);
|
||||
+#else
|
||||
+ vsnprintf (s, sizeof (s), format, args);
|
||||
+#endif
|
||||
len = strlen(s);
|
||||
|
||||
if (parser->log_size + len + 1 >= parser->log_alloc) {
|
||||
@@ -428,6 +436,10 @@ orc_parse_log_valist (OrcParser *parser, const char *format, va_list args)
|
||||
|
||||
strcpy (parser->log + parser->log_size, s);
|
||||
parser->log_size += len;
|
||||
+
|
||||
+#ifdef HAVE_VASPRINTF
|
||||
+ free (s);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.45.2
|
||||
|
@ -0,0 +1,66 @@
|
||||
From 508280f7ac31c7d0ab2eaed33b26e6df59bb4dd9 Mon Sep 17 00:00:00 2001
|
||||
From: "L. E. Segovia" <amy@centricular.com>
|
||||
Date: Fri, 19 Jul 2024 22:25:20 -0300
|
||||
Subject: [PATCH 1/2] powerpc: fix div255w which still used the inexact
|
||||
substitution
|
||||
|
||||
The code for this architecture used the substitution suggested in the
|
||||
original bug report. That one had subtle failures on armv7a and aarch64,
|
||||
but I was not able to verify if they affected PowerPC too.
|
||||
|
||||
This commit fixes it by reusing the mulhuw instruction implementation --
|
||||
sse2 can be ported directly that way.
|
||||
|
||||
Fixes #71
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/195>
|
||||
---
|
||||
orc/orcrules-altivec.c | 31 +++++++++++++++----------------
|
||||
1 file changed, 15 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/orc/orcrules-altivec.c b/orc/orcrules-altivec.c
|
||||
index 23409a8..a13fb5b 100644
|
||||
--- a/orc/orcrules-altivec.c
|
||||
+++ b/orc/orcrules-altivec.c
|
||||
@@ -1513,23 +1513,22 @@ powerpc_rule_convlf (OrcCompiler *p, void *user, OrcInstruction *insn)
|
||||
static void
|
||||
powerpc_rule_div255w (OrcCompiler *p, void *user, OrcInstruction *insn)
|
||||
{
|
||||
- int src1 = ORC_SRC_ARG (p, insn, 0);
|
||||
- int dest = ORC_DEST_ARG (p, insn, 0);
|
||||
- int tmp = orc_compiler_get_temp_reg (p);
|
||||
- int tmp2 = orc_compiler_get_temp_reg (p);
|
||||
- int tmpc;
|
||||
-
|
||||
- tmpc = powerpc_get_constant (p, ORC_CONST_SPLAT_W, 0x0001);
|
||||
-
|
||||
- ORC_ASM_CODE(p," vspltish %s, 8\n", powerpc_get_regname(tmp2));
|
||||
- powerpc_emit_VX(p, 0x1000034c, powerpc_regnum(tmp2), 8, 0);
|
||||
-
|
||||
- powerpc_emit_VX_2 (p, "vadduhm", 0x10000040, dest, src1, tmpc);
|
||||
-
|
||||
- powerpc_emit_VX_2 (p, "vsrh", 0x10000244, tmp, src1, tmp2);
|
||||
- powerpc_emit_VX_2 (p, "vadduhm", 0x10000040, dest, dest, tmp);
|
||||
+ const int src1 = ORC_SRC_ARG (p, insn, 0);
|
||||
+ const int dest = ORC_DEST_ARG(p, insn, 0);
|
||||
+ const int tmp = powerpc_get_constant (p, ORC_CONST_SPLAT_W, 7);
|
||||
+ const int tmpc = powerpc_get_constant (p, ORC_CONST_SPLAT_W, 0x8081);
|
||||
+
|
||||
+ {
|
||||
+ // mulhuw
|
||||
+ const int perm = powerpc_get_constant_full(p, 0x10110001, 0x14150405,
|
||||
+ 0x18190809, 0x1c1d0c0d);
|
||||
+
|
||||
+ powerpc_emit_vmuleuh (p, p->tmpreg, src1, tmpc);
|
||||
+ powerpc_emit_vmulouh (p, dest, src1, tmpc);
|
||||
+ powerpc_emit_vperm (p, dest, dest, p->tmpreg, perm);
|
||||
+ }
|
||||
|
||||
- powerpc_emit_VX_2 (p, "vsrh", 0x10000244, dest, dest, tmp2);
|
||||
+ powerpc_emit_VX_2 (p, "vsrh", 0x10000244, dest, dest, tmp);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.45.2
|
||||
|
Loading…
Reference in new issue