public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/chromium] epel9-next: - Update to 141.0.7390.54
@ 2026-08-07 16:08 Than Ngo
0 siblings, 0 replies; only message in thread
From: Than Ngo @ 2026-08-07 16:08 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/chromium
Branch : epel9-next
Commit : 98bb985bc971e4a1221cae6d1093ffa1661bc7e0
Author : Than Ngo <than@redhat.com>
Date : 2025-10-02T08:40:29+02:00
Stats : +667/-501 in 13 file(s)
URL : https://src.fedoraproject.org/rpms/chromium/c/98bb985bc971e4a1221cae6d1093ffa1661bc7e0?branch=epel9-next
Log:
- Update to 141.0.7390.54
* High CVE-2025-11205: Heap buffer overflow in WebGPU
* High CVE-2025-11206: Heap buffer overflow in Video
* Medium CVE-2025-11207: Side-channel information leakage in Storage
* Medium CVE-2025-11208: Inappropriate implementation in Media
* Medium CVE-2025-11209: Inappropriate implementation in Omnibox
* Medium CVE-2025-11210: Side-channel information leakage in Tab
* Medium CVE-2025-11211: Out of bounds read in Media
* Medium CVE-2025-11212: Inappropriate implementation in Media
* Medium CVE-2025-11213: Inappropriate implementation in Omnibox
* Medium CVE-2025-11215: Off by one error in V8
* Low CVE-2025-11216: Inappropriate implementation in Storage
* Low CVE-2025-11219: Use after free in V8
- Refreshed ppc64le patches
- Fixed issue with incorrect display of the links on startpage in Darkmode
- Fixed FTBFS - error: no member named 'bPsnrY' in 'Source_Picture_s'
- Fixed, DebugInfo packages aren't being produced
- Refreshed rust-clanglib patch
- Fixed FTBFS due to old ffmpeg on Epel9
- Fixed FTBFS - error: invalid application of 'sizeof' to an incomplete type 'blink::CSSStyleSheet'
- Fixed FTBFS due to missing header files
---
diff --git a/0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch b/0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch
index 978fba2..8825b67 100644
--- a/0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch
+++ b/0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch
@@ -1,32 +1,6 @@
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf/trap.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf/trap.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf/trap.cc
-@@ -236,6 +236,20 @@ void Trap::SigSys(int nr, LinuxSigInfo*
- SetIsInSigHandler();
- }
-
-+#if defined(__powerpc64__)
-+ // On ppc64+glibc, some syscalls seem to accidentally negate the first
-+ // parameter which causes checks against it to fail. For now, manually
-+ // negate them back.
-+ // TODO(sanastasio@raptorengineering.com): investigate this issue further
-+ auto nr = SECCOMP_SYSCALL(ctx);
-+ if (nr == __NR_openat || nr == __NR_mkdirat || nr == __NR_faccessat || nr == __NR_readlinkat ||
-+ nr == __NR_renameat || nr == __NR_renameat2 || nr == __NR_newfstatat || nr == __NR_unlinkat) {
-+ if (static_cast<int>(SECCOMP_PARM1(ctx)) > 0) {
-+ SECCOMP_PARM1(ctx) = -SECCOMP_PARM1(ctx);
-+ }
-+ }
-+#endif
-+
- // Copy the seccomp-specific data into a arch_seccomp_data structure. This
- // is what we are showing to TrapFnc callbacks that the system call
- // evaluator registered with the sandbox.
-Index: chromium-140.0.7339.41/sandbox/features.gni
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/features.gni
-+++ chromium-140.0.7339.41/sandbox/features.gni
+diff -up chromium-141.0.7390.37/sandbox/features.gni.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/features.gni
+--- chromium-141.0.7390.37/sandbox/features.gni.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/features.gni 2025-09-28 10:15:55.414893495 +0200
@@ -9,4 +9,5 @@
use_seccomp_bpf = (is_linux || is_chromeos || is_android) &&
(current_cpu == "x86" || current_cpu == "x64" ||
@@ -34,35 +8,9 @@ Index: chromium-140.0.7339.41/sandbox/features.gni
- current_cpu == "mipsel" || current_cpu == "mips64el")
+ current_cpu == "mipsel" || current_cpu == "mips64el" ||
+ current_cpu == "ppc64")
-Index: chromium-140.0.7339.41/sandbox/policy/linux/bpf_renderer_policy_linux.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/policy/linux/bpf_renderer_policy_linux.cc
-+++ chromium-140.0.7339.41/sandbox/policy/linux/bpf_renderer_policy_linux.cc
-@@ -17,6 +17,11 @@
- #include "sandbox/linux/system_headers/linux_syscalls.h"
- #include "sandbox/policy/linux/sandbox_linux.h"
-
-+// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
-+#ifdef __powerpc64__
-+#include <termios.h>
-+#endif
-+
- // TODO(vignatti): replace the local definitions below with #include
- // <linux/dma-buf.h> once kernel version 4.6 becomes widely used.
- #include <linux/types.h>
-@@ -86,7 +91,7 @@ ResultExpr RendererProcessPolicy::Evalua
- case __NR_ftruncate64:
- #endif
- #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_getrlimit:
- case __NR_setrlimit:
- // We allow setrlimit to dynamically adjust the address space limit as
-Index: chromium-140.0.7339.41/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
-+++ chromium-140.0.7339.41/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
+diff -up chromium-141.0.7390.37/sandbox/linux/bpf_dsl/linux_syscall_ranges.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
+--- chromium-141.0.7390.37/sandbox/linux/bpf_dsl/linux_syscall_ranges.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/bpf_dsl/linux_syscall_ranges.h 2025-09-28 10:15:55.415120766 +0200
@@ -56,6 +56,13 @@
#define MAX_PUBLIC_SYSCALL __NR_syscalls
#define MAX_SYSCALL MAX_PUBLIC_SYSCALL
@@ -77,97 +25,86 @@ Index: chromium-140.0.7339.41/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
#else
#error "Unsupported architecture"
#endif
-Index: chromium-140.0.7339.41/sandbox/linux/BUILD.gn
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/BUILD.gn
-+++ chromium-140.0.7339.41/sandbox/linux/BUILD.gn
-@@ -377,6 +377,8 @@ component("sandbox_services") {
-
- source_set("sandbox_services_headers") {
- sources = [
-+ "system_headers/ppc64_linux_syscalls.h",
-+ "system_headers/ppc64_linux_ucontext.h",
- "system_headers/arm64_linux_syscalls.h",
- "system_headers/arm_linux_syscalls.h",
- "system_headers/arm_linux_ucontext.h",
-Index: chromium-140.0.7339.41/sandbox/linux/system_headers/linux_syscalls.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/system_headers/linux_syscalls.h
-+++ chromium-140.0.7339.41/sandbox/linux/system_headers/linux_syscalls.h
-@@ -35,5 +35,9 @@
- #include "sandbox/linux/system_headers/arm64_linux_syscalls.h"
+diff -up chromium-141.0.7390.37/sandbox/linux/bpf_dsl/seccomp_macros.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/bpf_dsl/seccomp_macros.h
+--- chromium-141.0.7390.37/sandbox/linux/bpf_dsl/seccomp_macros.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/bpf_dsl/seccomp_macros.h 2025-09-28 10:15:55.416743928 +0200
+@@ -14,6 +14,9 @@
+ #if defined(__mips__)
+ // sys/user.h in eglibc misses size_t definition
+ #include <stddef.h>
++#elif defined(__powerpc64__)
++// Manually define greg_t on ppc64
++typedef unsigned long long greg_t;
+ #endif
#endif
-+#if defined(__powerpc64__)
-+#include "sandbox/linux/system_headers/ppc64_linux_syscalls.h"
-+#endif
-+
- #endif // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SYSCALLS_H_
-
-Index: chromium-140.0.7339.41/sandbox/linux/system_headers/ppc64_linux_syscalls.h
-===================================================================
---- /dev/null
-+++ chromium-140.0.7339.41/sandbox/linux/system_headers/ppc64_linux_syscalls.h
-@@ -0,0 +1,25 @@
-+// Copyright 2014 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
+@@ -343,6 +346,51 @@ struct regs_struct {
+ #define SECCOMP_PT_PARM4(_regs) (_regs).regs[3]
+ #define SECCOMP_PT_PARM5(_regs) (_regs).regs[4]
+ #define SECCOMP_PT_PARM6(_regs) (_regs).regs[5]
+
-+#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
-+#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
++#elif defined(__powerpc64__)
++#include <asm/ptrace.h>
+
-+#include <asm/unistd.h>
++typedef struct pt_regs regs_struct;
+
-+//TODO: is it necessary to redefine syscall numbers for PPC64?
-+// Needed for Ubuntu/Debian/Centos/RHEL:
-+#if !defined(__NR_shmget)
-+#define __NR_shmget 395
-+#endif
-+#if !defined(__NR_shmdt)
-+#define __NR_shmdt 398
-+#endif
-+#if !defined(__NR_shmctl)
-+#define __NR_shmctl 396
-+#endif
-+#if !defined(__NR_shmat)
-+#define __NR_shmat 397
++#ifdef ARCH_CPU_LITTLE_ENDIAN
++#define SECCOMP_ARCH AUDIT_ARCH_PPC64LE
++#else
++#define SECCOMP_ARCH AUDIT_ARCH_PPC64
+#endif
+
-+#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
-Index: chromium-140.0.7339.41/sandbox/linux/system_headers/ppc64_linux_ucontext.h
-===================================================================
---- /dev/null
-+++ chromium-140.0.7339.41/sandbox/linux/system_headers/ppc64_linux_ucontext.h
-@@ -0,0 +1,12 @@
-+// Copyright 2014 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
++#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
+
-+#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
-+#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
++#define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
++#define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
++#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
++#define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
++#define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
++#define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
++#define SECCOMP_PARM4(_ctx) SECCOMP_REG(_ctx, 6)
++#define SECCOMP_PARM5(_ctx) SECCOMP_REG(_ctx, 7)
++#define SECCOMP_PARM6(_ctx) SECCOMP_REG(_ctx, 8)
+
-+#include <sys/ucontext.h>
++#define SECCOMP_NR_IDX (offsetof(struct arch_seccomp_data, nr))
++#define SECCOMP_ARCH_IDX (offsetof(struct arch_seccomp_data, arch))
++#define SECCOMP_IP_MSB_IDX \
++ (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
++#define SECCOMP_IP_LSB_IDX \
++ (offsetof(struct arch_seccomp_data, instruction_pointer) + 0)
++#define SECCOMP_ARG_MSB_IDX(nr) \
++ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
++#define SECCOMP_ARG_LSB_IDX(nr) \
++ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
+
-+//TODO: is it necessary to redefine ucontext on PPC64?
++#define SECCOMP_PT_RESULT(_regs) (_regs).gpr[3]
++#define SECCOMP_PT_SYSCALL(_regs) (_regs).gpr[0]
++#define SECCOMP_PT_IP(_regs) (_regs).nip
++#define SECCOMP_PT_PARM1(_regs) (_regs).gpr[3]
++#define SECCOMP_PT_PARM2(_regs) (_regs).gpr[4]
++#define SECCOMP_PT_PARM3(_regs) (_regs).gpr[5]
++#define SECCOMP_PT_PARM4(_regs) (_regs).gpr[6]
++#define SECCOMP_PT_PARM5(_regs) (_regs).gpr[7]
++#define SECCOMP_PT_PARM6(_regs) (_regs).gpr[8]
+
-+#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
-Index: chromium-140.0.7339.41/sandbox/linux/syscall_broker/broker_process.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/syscall_broker/broker_process.cc
-+++ chromium-140.0.7339.41/sandbox/linux/syscall_broker/broker_process.cc
-@@ -167,7 +167,7 @@ bool BrokerProcess::IsSyscallBrokerable(
- #if defined(__NR_fstatat64)
- case __NR_fstatat64:
- #endif
--#if defined(__x86_64__) || defined(__aarch64__)
-+#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
- case __NR_newfstatat:
- #endif
- return !fast_check || policy_->allowed_command_set.test(COMMAND_STAT);
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+ #else
+ #error Unsupported target platform
+
+diff -up chromium-141.0.7390.37/sandbox/linux/BUILD.gn.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/BUILD.gn
+--- chromium-141.0.7390.37/sandbox/linux/BUILD.gn.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/BUILD.gn 2025-09-28 10:15:55.415227970 +0200
+@@ -377,6 +377,8 @@ component("sandbox_services") {
+
+ source_set("sandbox_services_headers") {
+ sources = [
++ "system_headers/ppc64_linux_syscalls.h",
++ "system_headers/ppc64_linux_ucontext.h",
+ "system_headers/arm64_linux_syscalls.h",
+ "system_headers/arm_linux_syscalls.h",
+ "system_headers/arm_linux_ucontext.h",
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2025-09-28 10:15:55.415675419 +0200
@@ -90,7 +90,8 @@ bool IsBaselinePolicyWatched(int sysno)
SyscallSets::IsPrctl(sysno) ||
SyscallSets::IsProcessGroupOrSession(sysno) ||
@@ -197,20 +134,54 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/baseline_policy.
if (SyscallSets::IsSocketCall(sysno))
return RestrictSocketcallCommand();
#endif
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
-@@ -39,7 +39,7 @@
- #include "sandbox/linux/system_headers/linux_syscalls.h"
- #include "sandbox/linux/system_headers/linux_time.h"
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc 2025-09-28 10:15:55.417132817 +0200
+@@ -350,8 +350,10 @@ TEST_BASELINE_SIGSYS(__NR_timer_create)
+
+ #if !defined(__aarch64__)
+ TEST_BASELINE_SIGSYS(__NR_inotify_init)
++#if !defined(__powerpc64__)
+ TEST_BASELINE_SIGSYS(__NR_vserver)
+ #endif
++#endif
+
+ #if defined(LIBC_GLIBC) && !BUILDFLAG(IS_CHROMEOS)
+ BPF_TEST_C(BaselinePolicy, FutexEINVAL, BaselinePolicy) {
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2025-09-28 10:15:55.417609762 +0200
+@@ -389,7 +389,16 @@ intptr_t SIGSYSFstatatHandler(const stru
+ if (args.nr == __NR_fstatat_default) {
+ if (*reinterpret_cast<const char*>(args.args[1]) == '\0' &&
+ args.args[3] == static_cast<uint64_t>(AT_EMPTY_PATH)) {
+- return syscall(__NR_fstat_default, static_cast<int>(args.args[0]),
++ int fd = static_cast<int>(args.args[0]);
++#if defined(__powerpc64__)
++ // On ppc64+glibc, some syscalls seem to accidentally negate the first
++ // parameter which causes checks against it to fail. For now, manually
++ // negate them back.
++ // TODO: Investigate the root cause and fix in glibc
++ if (fd < 0)
++ fd = -fd;
++#endif
++ return syscall(__NR_fstat_default, fd,
+ reinterpret_cast<default_stat_struct*>(args.args[2]));
+ }
+ return -reinterpret_cast<intptr_t>(fs_denied_errno);
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc 2025-09-28 10:15:55.415814493 +0200
+@@ -43,7 +43,7 @@
+ #define MAP_DROPPABLE 0x08 // Zero memory under memory pressure.
+ #endif
-#if BUILDFLAG(IS_LINUX) && !defined(__arm__) && !defined(__aarch64__) && \
+#if BUILDFLAG(IS_LINUX) && !defined(__arm__) && !defined(__aarch64__) && !defined(__powerpc64__) && \
!defined(PTRACE_GET_THREAD_AREA)
// Also include asm/ptrace-abi.h since ptrace.h in older libc (for instance
// the one in Ubuntu 16.04 LTS) is missing PTRACE_GET_THREAD_AREA.
-@@ -48,6 +48,11 @@
+@@ -52,6 +52,11 @@
#include <asm/ptrace-abi.h>
#endif
@@ -222,7 +193,7 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
#if BUILDFLAG(IS_ANDROID)
#if !defined(F_DUPFD_CLOEXEC)
-@@ -105,6 +110,15 @@ inline bool IsArchitectureMips() {
+@@ -109,6 +114,15 @@ inline bool IsArchitectureMips() {
#endif
}
@@ -238,7 +209,7 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
// Ubuntu's version of glibc has a race condition in sem_post that can cause
// it to call futex(2) with bogus op arguments. To workaround this, we need
// to allow those futex(2) calls to fail with EINVAL, instead of crashing the
-@@ -279,9 +293,11 @@ ResultExpr RestrictFcntlCommands() {
+@@ -287,9 +301,11 @@ ResultExpr RestrictFcntlCommands() {
// operator.
// Glibc overrides the kernel's O_LARGEFILE value. Account for this.
uint64_t kOLargeFileFlag = O_LARGEFILE;
@@ -251,7 +222,7 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
const Arg<int> cmd(1);
const Arg<long> long_arg(2);
-@@ -304,8 +320,17 @@ ResultExpr RestrictFcntlCommands() {
+@@ -312,8 +328,17 @@ ResultExpr RestrictFcntlCommands() {
F_SETLKW,
F_GETLK,
F_DUPFD,
@@ -271,7 +242,7 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
.Case(F_SETFL,
If((long_arg & ~kAllowedMask) == 0, Allow()).Else(CrashSIGSYS()))
.Case(F_ADD_SEALS,
-@@ -314,7 +339,7 @@ ResultExpr RestrictFcntlCommands() {
+@@ -322,7 +347,7 @@ ResultExpr RestrictFcntlCommands() {
// clang-format on
}
@@ -280,7 +251,7 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
ResultExpr RestrictSocketcallCommand() {
// Unfortunately, we are unable to restrict the first parameter to
// socketpair(2). Whilst initially sounding bad, it's noteworthy that very
-@@ -480,7 +505,7 @@ ResultExpr RestrictPtrace() {
+@@ -488,7 +513,7 @@ ResultExpr RestrictPtrace() {
#endif
return Switch(request)
.Cases({
@@ -289,7 +260,7 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
PTRACE_GETREGS, PTRACE_GETFPREGS, PTRACE_GET_THREAD_AREA,
PTRACE_GETREGSET,
#endif
-@@ -520,13 +545,14 @@ SANDBOX_EXPORT bpf_dsl::ResultExpr Restr
+@@ -528,13 +553,14 @@ SANDBOX_EXPORT bpf_dsl::ResultExpr Restr
size_t argIndex;
switch (sysno) {
#if defined(__arm__) || \
@@ -306,10 +277,9 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
case __NR_sendto: // Could specify destination.
argIndex = 3;
break;
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h 2025-09-28 10:15:55.415949009 +0200
@@ -56,7 +56,7 @@ SANDBOX_EXPORT bpf_dsl::ResultExpr Restr
// O_NONBLOCK | O_SYNC | O_LARGEFILE | O_CLOEXEC | O_NOATIME.
SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictFcntlCommands();
@@ -319,10 +289,9 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_paramete
// Restrict socketcall(2) to only allow socketpair(2), send(2), recv(2),
// sendto(2), recvfrom(2), shutdown(2), sendmsg(2) and recvmsg(2).
SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictSocketcallCommand();
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc 2025-09-28 10:15:55.416060681 +0200
@@ -29,7 +29,8 @@ bool SyscallSets::IsAllowedGettime(int s
switch (sysno) {
case __NR_gettimeofday:
@@ -782,10 +751,9 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
case __NR_vserver:
#endif
return true;
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h 2025-09-28 10:15:55.416557304 +0200
@@ -46,13 +46,14 @@ class SANDBOX_EXPORT SyscallSets {
static bool IsDeniedGetOrModifySocket(int sysno);
@@ -835,129 +803,9 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
// Big system V multiplexing system call.
static bool IsSystemVIpc(int sysno);
#endif
-Index: chromium-140.0.7339.41/sandbox/linux/services/syscall_wrappers.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/services/syscall_wrappers.cc
-+++ chromium-140.0.7339.41/sandbox/linux/services/syscall_wrappers.cc
-@@ -68,7 +68,7 @@ long sys_clone(unsigned long flags,
- #if defined(ARCH_CPU_X86_64)
- return syscall(__NR_clone, flags, child_stack, ptid, ctid, tls);
- #elif defined(ARCH_CPU_X86) || defined(ARCH_CPU_ARM_FAMILY) || \
-- defined(ARCH_CPU_MIPS_FAMILY)
-+ defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_PPC64_FAMILY)
- // CONFIG_CLONE_BACKWARDS defined.
- return syscall(__NR_clone, flags, child_stack, ptid, tls, ctid);
- #endif
-Index: chromium-140.0.7339.41/sandbox/linux/bpf_dsl/seccomp_macros.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/bpf_dsl/seccomp_macros.h
-+++ chromium-140.0.7339.41/sandbox/linux/bpf_dsl/seccomp_macros.h
-@@ -14,6 +14,9 @@
- #if defined(__mips__)
- // sys/user.h in eglibc misses size_t definition
- #include <stddef.h>
-+#elif defined(__powerpc64__)
-+// Manually define greg_t on ppc64
-+typedef unsigned long long greg_t;
- #endif
- #endif
-
-@@ -343,6 +346,51 @@ struct regs_struct {
- #define SECCOMP_PT_PARM4(_regs) (_regs).regs[3]
- #define SECCOMP_PT_PARM5(_regs) (_regs).regs[4]
- #define SECCOMP_PT_PARM6(_regs) (_regs).regs[5]
-+
-+#elif defined(__powerpc64__)
-+#include <asm/ptrace.h>
-+
-+typedef struct pt_regs regs_struct;
-+
-+#ifdef ARCH_CPU_LITTLE_ENDIAN
-+#define SECCOMP_ARCH AUDIT_ARCH_PPC64LE
-+#else
-+#define SECCOMP_ARCH AUDIT_ARCH_PPC64
-+#endif
-+
-+#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
-+
-+#define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
-+#define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
-+#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
-+#define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
-+#define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
-+#define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
-+#define SECCOMP_PARM4(_ctx) SECCOMP_REG(_ctx, 6)
-+#define SECCOMP_PARM5(_ctx) SECCOMP_REG(_ctx, 7)
-+#define SECCOMP_PARM6(_ctx) SECCOMP_REG(_ctx, 8)
-+
-+#define SECCOMP_NR_IDX (offsetof(struct arch_seccomp_data, nr))
-+#define SECCOMP_ARCH_IDX (offsetof(struct arch_seccomp_data, arch))
-+#define SECCOMP_IP_MSB_IDX \
-+ (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
-+#define SECCOMP_IP_LSB_IDX \
-+ (offsetof(struct arch_seccomp_data, instruction_pointer) + 0)
-+#define SECCOMP_ARG_MSB_IDX(nr) \
-+ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
-+#define SECCOMP_ARG_LSB_IDX(nr) \
-+ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
-+
-+#define SECCOMP_PT_RESULT(_regs) (_regs).gpr[3]
-+#define SECCOMP_PT_SYSCALL(_regs) (_regs).gpr[0]
-+#define SECCOMP_PT_IP(_regs) (_regs).nip
-+#define SECCOMP_PT_PARM1(_regs) (_regs).gpr[3]
-+#define SECCOMP_PT_PARM2(_regs) (_regs).gpr[4]
-+#define SECCOMP_PT_PARM3(_regs) (_regs).gpr[5]
-+#define SECCOMP_PT_PARM4(_regs) (_regs).gpr[6]
-+#define SECCOMP_PT_PARM5(_regs) (_regs).gpr[7]
-+#define SECCOMP_PT_PARM6(_regs) (_regs).gpr[8]
-+
- #else
- #error Unsupported target platform
-
-Index: chromium-140.0.7339.41/sandbox/linux/system_headers/linux_seccomp.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/system_headers/linux_seccomp.h
-+++ chromium-140.0.7339.41/sandbox/linux/system_headers/linux_seccomp.h
-@@ -38,6 +38,9 @@
- #ifndef EM_AARCH64
- #define EM_AARCH64 183
- #endif
-+#ifndef EM_PPC64
-+#define EM_PPC64 21
-+#endif
-
- #ifndef __AUDIT_ARCH_64BIT
- #define __AUDIT_ARCH_64BIT 0x80000000
-@@ -70,6 +73,12 @@
- #ifndef AUDIT_ARCH_AARCH64
- #define AUDIT_ARCH_AARCH64 (EM_AARCH64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
- #endif
-+#ifndef AUDIT_ARCH_PPC64
-+#define AUDIT_ARCH_PPC64 (EM_PPC64 | __AUDIT_ARCH_64BIT)
-+#endif
-+#ifndef AUDIT_ARCH_PPC64LE
-+#define AUDIT_ARCH_PPC64LE (EM_PPC64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
-+#endif
-
- // For prctl.h
- #ifndef PR_SET_SECCOMP
-Index: chromium-140.0.7339.41/sandbox/linux/system_headers/linux_signal.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/system_headers/linux_signal.h
-+++ chromium-140.0.7339.41/sandbox/linux/system_headers/linux_signal.h
-@@ -13,7 +13,7 @@
- // (not undefined, but defined different values and in different memory
- // layouts). So, fill the gap here.
- #if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
-
- #define LINUX_SIGHUP 1
- #define LINUX_SIGINT 2
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf/syscall.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf/syscall.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf/syscall.cc
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/syscall.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/syscall.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/syscall.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/syscall.cc 2025-09-28 10:15:55.417019291 +0200
@@ -19,7 +19,7 @@ namespace sandbox {
namespace {
@@ -1052,25 +900,129 @@ Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf/syscall.cc
#endif
SECCOMP_RESULT(ctx) = static_cast<greg_t>(ret_val);
}
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc
-@@ -350,8 +350,10 @@ TEST_BASELINE_SIGSYS(__NR_timer_create)
+diff -up chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/trap.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/trap.cc
+--- chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/trap.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/seccomp-bpf/trap.cc 2025-09-28 10:15:55.414751305 +0200
+@@ -236,6 +236,20 @@ void Trap::SigSys(int nr, LinuxSigInfo*
+ SetIsInSigHandler();
+ }
- #if !defined(__aarch64__)
- TEST_BASELINE_SIGSYS(__NR_inotify_init)
-+#if !defined(__powerpc64__)
- TEST_BASELINE_SIGSYS(__NR_vserver)
++#if defined(__powerpc64__)
++ // On ppc64+glibc, some syscalls seem to accidentally negate the first
++ // parameter which causes checks against it to fail. For now, manually
++ // negate them back.
++ // TODO(sanastasio@raptorengineering.com): investigate this issue further
++ auto nr = SECCOMP_SYSCALL(ctx);
++ if (nr == __NR_openat || nr == __NR_mkdirat || nr == __NR_faccessat || nr == __NR_readlinkat ||
++ nr == __NR_renameat || nr == __NR_renameat2 || nr == __NR_newfstatat || nr == __NR_unlinkat) {
++ if (static_cast<int>(SECCOMP_PARM1(ctx)) > 0) {
++ SECCOMP_PARM1(ctx) = -SECCOMP_PARM1(ctx);
++ }
++ }
++#endif
++
+ // Copy the seccomp-specific data into a arch_seccomp_data structure. This
+ // is what we are showing to TrapFnc callbacks that the system call
+ // evaluator registered with the sandbox.
+diff -up chromium-141.0.7390.37/sandbox/linux/services/credentials.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/services/credentials.cc
+--- chromium-141.0.7390.37/sandbox/linux/services/credentials.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/services/credentials.cc 2025-09-28 10:18:58.609023878 +0200
+@@ -85,7 +85,7 @@ bool ChrootToSafeEmptyDir() {
+ alignas(16) std::array<char, PTHREAD_STACK_MIN_CONST> stack_buf;
+
+ #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) || \
+- defined(ARCH_CPU_MIPS_FAMILY)
++ defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_PPC64_FAMILY)
+ // SAFETY: This is the `stack` argument of `clone(2)`. Because the stack grows
+ // downward on these architectures, this is the topmost address of the memory
+ // space for the stack, and the address will not be dereferenced.
+@@ -96,7 +96,8 @@ bool ChrootToSafeEmptyDir() {
+
+ int clone_flags = CLONE_FS | LINUX_SIGCHLD;
+ void* tls = nullptr;
+-#if (defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_ARM_FAMILY)) && \
++#if (defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_ARM_FAMILY) || \
++ defined(ARCH_CPU_PPC64_FAMILY)) && \
+ !defined(MEMORY_SANITIZER)
+ // Use CLONE_VM | CLONE_VFORK as an optimization to avoid copying page tables.
+ // Since clone writes to the new child's TLS before returning, we must set a
+@@ -104,6 +105,11 @@ bool ChrootToSafeEmptyDir() {
+ // glibc performs syscalls by calling a function pointer in TLS, so we do not
+ // attempt this optimization.
+ // TODO(crbug.com/40196869) Broken in MSan builds after LLVM f1bb30a4956f.
++ //
++ // NOTE: Without CLONE_VM, fontconfig will attempt to reload configuration
++ // in every thread. Since the rendered threads are sandboxed without
++ // filesystem access (e.g. to /etc/fonts/fonts.conf) this will cause font
++ // configuration loading failures and no fonts will be displayed!
+ clone_flags |= CLONE_VM | CLONE_VFORK | CLONE_SETTLS;
+
+ char tls_buf[PTHREAD_STACK_MIN_CONST] = {};
+diff -up chromium-141.0.7390.37/sandbox/linux/services/syscall_wrappers.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/services/syscall_wrappers.cc
+--- chromium-141.0.7390.37/sandbox/linux/services/syscall_wrappers.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/services/syscall_wrappers.cc 2025-09-28 10:15:55.416648236 +0200
+@@ -68,7 +68,7 @@ long sys_clone(unsigned long flags,
+ #if defined(ARCH_CPU_X86_64)
+ return syscall(__NR_clone, flags, child_stack, ptid, ctid, tls);
+ #elif defined(ARCH_CPU_X86) || defined(ARCH_CPU_ARM_FAMILY) || \
+- defined(ARCH_CPU_MIPS_FAMILY)
++ defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_PPC64_FAMILY)
+ // CONFIG_CLONE_BACKWARDS defined.
+ return syscall(__NR_clone, flags, child_stack, ptid, tls, ctid);
+ #endif
+diff -up chromium-141.0.7390.37/sandbox/linux/syscall_broker/broker_process.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/syscall_broker/broker_process.cc
+--- chromium-141.0.7390.37/sandbox/linux/syscall_broker/broker_process.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/syscall_broker/broker_process.cc 2025-09-28 10:15:55.415563066 +0200
+@@ -167,7 +167,7 @@ bool BrokerProcess::IsSyscallBrokerable(
+ #if defined(__NR_fstatat64)
+ case __NR_fstatat64:
+ #endif
+-#if defined(__x86_64__) || defined(__aarch64__)
++#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_newfstatat:
#endif
+ return !fast_check || policy_->allowed_command_set.test(COMMAND_STAT);
+diff -up chromium-141.0.7390.37/sandbox/linux/system_headers/linux_seccomp.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/system_headers/linux_seccomp.h
+--- chromium-141.0.7390.37/sandbox/linux/system_headers/linux_seccomp.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/system_headers/linux_seccomp.h 2025-09-28 10:15:55.416845160 +0200
+@@ -38,6 +38,9 @@
+ #ifndef EM_AARCH64
+ #define EM_AARCH64 183
+ #endif
++#ifndef EM_PPC64
++#define EM_PPC64 21
+#endif
- #if defined(LIBC_GLIBC) && !BUILDFLAG(IS_CHROMEOS)
- BPF_TEST_C(BaselinePolicy, FutexEINVAL, BaselinePolicy) {
-Index: chromium-140.0.7339.41/sandbox/linux/system_headers/linux_stat.h
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/system_headers/linux_stat.h
-+++ chromium-140.0.7339.41/sandbox/linux/system_headers/linux_stat.h
+ #ifndef __AUDIT_ARCH_64BIT
+ #define __AUDIT_ARCH_64BIT 0x80000000
+@@ -70,6 +73,12 @@
+ #ifndef AUDIT_ARCH_AARCH64
+ #define AUDIT_ARCH_AARCH64 (EM_AARCH64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
+ #endif
++#ifndef AUDIT_ARCH_PPC64
++#define AUDIT_ARCH_PPC64 (EM_PPC64 | __AUDIT_ARCH_64BIT)
++#endif
++#ifndef AUDIT_ARCH_PPC64LE
++#define AUDIT_ARCH_PPC64LE (EM_PPC64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
++#endif
+
+ // For prctl.h
+ #ifndef PR_SET_SECCOMP
+diff -up chromium-141.0.7390.37/sandbox/linux/system_headers/linux_signal.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/system_headers/linux_signal.h
+--- chromium-141.0.7390.37/sandbox/linux/system_headers/linux_signal.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/system_headers/linux_signal.h 2025-09-28 10:15:55.416926335 +0200
+@@ -13,7 +13,7 @@
+ // (not undefined, but defined different values and in different memory
+ // layouts). So, fill the gap here.
+ #if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+
+ #define LINUX_SIGHUP 1
+ #define LINUX_SIGINT 2
+diff -up chromium-141.0.7390.37/sandbox/linux/system_headers/linux_stat.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/system_headers/linux_stat.h
+--- chromium-141.0.7390.37/sandbox/linux/system_headers/linux_stat.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/system_headers/linux_stat.h 2025-09-28 10:15:55.417253506 +0200
@@ -173,6 +173,28 @@ struct kernel_stat {
unsigned int __unused4;
unsigned int __unused5;
@@ -1100,45 +1052,91 @@ Index: chromium-140.0.7339.41/sandbox/linux/system_headers/linux_stat.h
#endif
#if !defined(AT_EMPTY_PATH)
-Index: chromium-140.0.7339.41/sandbox/linux/services/credentials.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/services/credentials.cc
-+++ chromium-140.0.7339.41/sandbox/linux/services/credentials.cc
-@@ -90,7 +90,7 @@ bool ChrootToSafeEmptyDir() {
- alignas(16) char stack_buf[PTHREAD_STACK_MIN_CONST];
+diff -up chromium-141.0.7390.37/sandbox/linux/system_headers/linux_syscalls.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/system_headers/linux_syscalls.h
+--- chromium-141.0.7390.37/sandbox/linux/system_headers/linux_syscalls.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/linux/system_headers/linux_syscalls.h 2025-09-28 10:15:55.415341084 +0200
+@@ -35,5 +35,9 @@
+ #include "sandbox/linux/system_headers/arm64_linux_syscalls.h"
+ #endif
- #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) || \
-- defined(ARCH_CPU_MIPS_FAMILY)
-+ defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_PPC64_FAMILY)
- // The stack grows downward.
- void* stack = stack_buf + sizeof(stack_buf);
- #else
-@@ -99,7 +99,8 @@ bool ChrootToSafeEmptyDir() {
++#if defined(__powerpc64__)
++#include "sandbox/linux/system_headers/ppc64_linux_syscalls.h"
++#endif
++
+ #endif // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SYSCALLS_H_
- int clone_flags = CLONE_FS | LINUX_SIGCHLD;
- void* tls = nullptr;
--#if (defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_ARM_FAMILY)) && \
-+#if (defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_ARM_FAMILY) || \
-+ defined(ARCH_CPU_PPC64_FAMILY)) && \
- !defined(MEMORY_SANITIZER)
- // Use CLONE_VM | CLONE_VFORK as an optimization to avoid copying page tables.
- // Since clone writes to the new child's TLS before returning, we must set a
-@@ -107,6 +108,11 @@ bool ChrootToSafeEmptyDir() {
- // glibc performs syscalls by calling a function pointer in TLS, so we do not
- // attempt this optimization.
- // TODO(crbug.com/40196869) Broken in MSan builds after LLVM f1bb30a4956f.
-+ //
-+ // NOTE: Without CLONE_VM, fontconfig will attempt to reload configuration
-+ // in every thread. Since the rendered threads are sandboxed without
-+ // filesystem access (e.g. to /etc/fonts/fonts.conf) this will cause font
-+ // configuration loading failures and no fonts will be displayed!
- clone_flags |= CLONE_VM | CLONE_VFORK | CLONE_SETTLS;
+diff -up chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_syscalls.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_syscalls.h
+--- chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_syscalls.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-28 10:15:55.415404074 +0200
++++ chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_syscalls.h 2025-09-28 10:15:55.415404074 +0200
+@@ -0,0 +1,25 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
++#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
++
++#include <asm/unistd.h>
++
++//TODO: is it necessary to redefine syscall numbers for PPC64?
++// Needed for Ubuntu/Debian/Centos/RHEL:
++#if !defined(__NR_shmget)
++#define __NR_shmget 395
++#endif
++#if !defined(__NR_shmdt)
++#define __NR_shmdt 398
++#endif
++#if !defined(__NR_shmctl)
++#define __NR_shmctl 396
++#endif
++#if !defined(__NR_shmat)
++#define __NR_shmat 397
++#endif
++
++#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
+diff -up chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_ucontext.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_ucontext.h
+--- chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_ucontext.h.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-28 10:15:55.415474818 +0200
++++ chromium-141.0.7390.37/sandbox/linux/system_headers/ppc64_linux_ucontext.h 2025-09-28 10:15:55.415474818 +0200
+@@ -0,0 +1,12 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
++#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
++
++#include <sys/ucontext.h>
++
++//TODO: is it necessary to redefine ucontext on PPC64?
++
++#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
+diff -up chromium-141.0.7390.37/sandbox/policy/linux/bpf_renderer_policy_linux.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/policy/linux/bpf_renderer_policy_linux.cc
+--- chromium-141.0.7390.37/sandbox/policy/linux/bpf_renderer_policy_linux.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/policy/linux/bpf_renderer_policy_linux.cc 2025-09-28 10:15:55.415005076 +0200
+@@ -17,6 +17,11 @@
+ #include "sandbox/linux/system_headers/linux_syscalls.h"
+ #include "sandbox/policy/linux/sandbox_linux.h"
- char tls_buf[PTHREAD_STACK_MIN_CONST] = {};
-Index: chromium-140.0.7339.41/sandbox/policy/linux/bpf_utility_policy_linux.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/policy/linux/bpf_utility_policy_linux.cc
-+++ chromium-140.0.7339.41/sandbox/policy/linux/bpf_utility_policy_linux.cc
++// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
++#ifdef __powerpc64__
++#include <termios.h>
++#endif
++
+ // TODO(vignatti): replace the local definitions below with #include
+ // <linux/dma-buf.h> once kernel version 4.6 becomes widely used.
+ #include <linux/types.h>
+@@ -86,7 +91,7 @@ ResultExpr RendererProcessPolicy::Evalua
+ case __NR_ftruncate64:
+ #endif
+ #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_getrlimit:
+ case __NR_setrlimit:
+ // We allow setrlimit to dynamically adjust the address space limit as
+diff -up chromium-141.0.7390.37/sandbox/policy/linux/bpf_utility_policy_linux.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 chromium-141.0.7390.37/sandbox/policy/linux/bpf_utility_policy_linux.cc
+--- chromium-141.0.7390.37/sandbox/policy/linux/bpf_utility_policy_linux.cc.0001-sandbox-Enable-seccomp_bpf-for-ppc64 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/sandbox/policy/linux/bpf_utility_policy_linux.cc 2025-09-28 10:15:55.417510624 +0200
@@ -34,7 +34,7 @@ ResultExpr UtilityProcessPolicy::Evaluat
case __NR_fdatasync:
case __NR_fsync:
@@ -1148,25 +1146,3 @@ Index: chromium-140.0.7339.41/sandbox/policy/linux/bpf_utility_policy_linux.cc
case __NR_getrlimit:
#endif
#if defined(__i386__) || defined(__arm__)
-Index: chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
-===================================================================
---- chromium-140.0.7339.41.orig/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
-+++ chromium-140.0.7339.41/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
-@@ -389,7 +389,16 @@ intptr_t SIGSYSFstatatHandler(const stru
- if (args.nr == __NR_fstatat_default) {
- if (*reinterpret_cast<const char*>(args.args[1]) == '\0' &&
- args.args[3] == static_cast<uint64_t>(AT_EMPTY_PATH)) {
-- return syscall(__NR_fstat_default, static_cast<int>(args.args[0]),
-+ int fd = static_cast<int>(args.args[0]);
-+#if defined(__powerpc64__)
-+ // On ppc64+glibc, some syscalls seem to accidentally negate the first
-+ // parameter which causes checks against it to fail. For now, manually
-+ // negate them back.
-+ // TODO: Investigate the root cause and fix in glibc
-+ if (fd < 0)
-+ fd = -fd;
-+#endif
-+ return syscall(__NR_fstat_default, fd,
- reinterpret_cast<default_stat_struct*>(args.args[2]));
- }
- return -reinterpret_cast<intptr_t>(fs_denied_errno);
diff --git a/chromium-107-ffmpeg-5.x-duration.patch b/chromium-107-ffmpeg-5.x-duration.patch
deleted file mode 100644
index ee01cd9..0000000
--- a/chromium-107-ffmpeg-5.x-duration.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -up chromium-107.0.5304.121/media/filters/audio_file_reader.cc.me chromium-107.0.5304.121/media/filters/audio_file_reader.cc
---- chromium-107.0.5304.121/media/filters/audio_file_reader.cc.me 2022-12-17 08:27:12.204753071 +0100
-+++ chromium-107.0.5304.121/media/filters/audio_file_reader.cc 2022-12-17 08:28:40.908211808 +0100
-@@ -243,10 +243,10 @@ bool AudioFileReader::OnNewFrame(
- // silence from being output. In the case where we are also discarding some
- // portion of the packet (as indicated by a negative pts), we further want to
- // adjust the duration downward by however much exists before zero.
-- if (audio_codec_ == AudioCodec::kAAC && frame->duration) {
-+ if (audio_codec_ == AudioCodec::kAAC && frame->pkt_duration) {
- const base::TimeDelta pkt_duration = ConvertFromTimeBase(
- glue_->format_context()->streams[stream_index_]->time_base,
-- frame->duration + std::min(static_cast<int64_t>(0), frame->pts));
-+ frame->pkt_duration + std::min(static_cast<int64_t>(0), frame->pts));
- const base::TimeDelta frame_duration =
- base::Seconds(frames_read / static_cast<double>(sample_rate_));
-
diff --git a/chromium-135-rust-clanglib.patch b/chromium-135-rust-clanglib.patch
deleted file mode 100644
index d758fa3..0000000
--- a/chromium-135-rust-clanglib.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-diff -up chromium-135.0.7049.84/build/config/clang/BUILD.gn.than chromium-135.0.7049.84/build/config/clang/BUILD.gn
---- chromium-135.0.7049.84/build/config/clang/BUILD.gn.than 2025-04-09 10:22:51.699058451 +0200
-+++ chromium-135.0.7049.84/build/config/clang/BUILD.gn 2025-04-09 10:43:06.524085005 +0200
-@@ -166,8 +166,8 @@ template("clang_lib") {
- _prefix = "lib"
- _suffix = ""
- _ext = "a"
-+ _libprefix = ""
-
-- _clang_lib_dir = "$clang_base_path/lib/clang/$clang_version/lib"
- if (is_win) {
- _dir = "windows"
- _prefix = ""
-@@ -197,7 +197,33 @@ template("clang_lib") {
- } else {
- assert(false) # Unhandled cpu type
- }
-- } else if (is_linux || is_chromeos) {
-+ } else if (is_linux) {
-+ if (current_cpu == "x64") {
-+ _dir = "x86_64-redhat-linux-gnu"
-+ _suffix ="-x86_64"
-+ } else if (current_cpu == "x86") {
-+ _dir = "i386-redhat-linux-gnu"
-+ _suffix = "-i386"
-+ } else if (current_cpu == "arm64") {
-+ _dir = "aarch64-redhat-linux-gnu"
-+ _suffix = "-aarch64"
-+ } else if (current_cpu == "arm") {
-+ _dir = "armhf-redhat-linux-gnu"
-+ _suffix = "-armhf"
-+ } else if (current_cpu == "ppc64") {
-+ _dir = "ppc64le-redhat-linux-gnu"
-+ _suffix = "-ppc64le"
-+ } else {
-+ assert(false) # Unhandled cpu type
-+ }
-+ # different clang lib dir in fedora/epel
-+ if (clang_version >= 17) {
-+ _suffix = ""
-+ } else if (clang_version >= 14) {
-+ _libprefix = "64"
-+ _dir = ""
-+ }
-+ } else if (is_chromeos) {
- if (current_cpu == "x64") {
- _dir = "x86_64-unknown-linux-gnu"
- } else if (current_cpu == "x86") {
-@@ -236,6 +262,7 @@ template("clang_lib") {
- assert(false) # Unhandled target platform
- }
-
-+ _clang_lib_dir = "$clang_base_path/lib${_libprefix}/clang/$clang_version/lib"
- _lib_file = "${_prefix}clang_rt.${_libname}${_suffix}.${_ext}"
- libs = [ "$_clang_lib_dir/$_dir/$_lib_file" ]
-
-diff -up chromium-135.0.7049.84/build/rust/rust_bindgen_generator.gni.than chromium-135.0.7049.84/build/rust/rust_bindgen_generator.gni
---- chromium-135.0.7049.84/build/rust/rust_bindgen_generator.gni.than 2025-04-09 10:46:48.772413981 +0200
-+++ chromium-135.0.7049.84/build/rust/rust_bindgen_generator.gni 2025-04-09 10:47:15.480900587 +0200
-@@ -18,11 +18,11 @@ if (host_os == "win") {
-
- # On Windows, the libclang.dll is beside the bindgen.exe, otherwise it is in
- # ../lib.
--_libclang_path = rust_bindgen_root
-+_libclang_path = clang_base_path
- if (host_os == "win") {
- _libclang_path += "/bin"
- } else {
-- _libclang_path += "/lib"
-+ _libclang_path += "/lib64"
- }
-
- # Template to build Rust/C bindings with bindgen.
-diff -up chromium-135.0.7049.84/build/rust/rust_bindgen.gni.than chromium-135.0.7049.84/build/rust/rust_bindgen.gni
---- chromium-135.0.7049.84/build/rust/rust_bindgen.gni.than 2025-04-09 10:45:53.577078718 +0200
-+++ chromium-135.0.7049.84/build/rust/rust_bindgen.gni 2025-04-09 10:46:29.974649891 +0200
-@@ -19,11 +19,11 @@ if (host_os == "win") {
-
- # On Windows, the libclang.dll is beside the bindgen.exe, otherwise it is in
- # ../lib.
--_libclang_path = rust_bindgen_root
-+_libclang_path = clang_base_path
- if (host_os == "win") {
- _libclang_path += "/bin"
- } else {
-- _libclang_path += "/lib"
-+ _libclang_path += "/lib64"
- }
-
- # Template to build Rust/C bindings with bindgen.
diff --git a/chromium-141-csss_style_sheet.patch b/chromium-141-csss_style_sheet.patch
new file mode 100644
index 0000000..fac8ede
--- /dev/null
+++ b/chromium-141-csss_style_sheet.patch
@@ -0,0 +1,16 @@
+Fix ftbfs
+
+v8/include/cppgc/visitor.h:440:19: error: invalid application of 'sizeof' to an incomplete type 'blink::CSSStyleSheet'
+ 440 | static_assert(sizeof(T), "Pointee type must be fully defined.");
+
+diff -up chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py.ftbfs-csss_style_sheet chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py
+--- chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py.ftbfs-csss_style_sheet 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py 2025-10-01 17:55:51.303926035 +0200
+@@ -433,6 +433,7 @@ def generate_observable_array(observable
+ header_node.accumulator.add_include_headers([
+ component_export_header(api_component, for_testing),
+ "third_party/blink/renderer/bindings/core/v8/idl_types.h",
++ "third_party/blink/renderer/core/css/css_style_sheet.h",
+ "third_party/blink/renderer/platform/bindings/observable_array.h",
+ ])
+ source_node.accumulator.add_include_headers([
diff --git a/chromium-141-el9-ffmpeg-5.x-duration.patch b/chromium-141-el9-ffmpeg-5.x-duration.patch
new file mode 100644
index 0000000..5c10bb9
--- /dev/null
+++ b/chromium-141-el9-ffmpeg-5.x-duration.patch
@@ -0,0 +1,16 @@
+diff -up chromium-141.0.7390.37/media/filters/audio_file_reader.cc.ffmpeg-5.x-duration chromium-141.0.7390.37/media/filters/audio_file_reader.cc
+--- chromium-141.0.7390.37/media/filters/audio_file_reader.cc.ffmpeg-5.x-duration 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/media/filters/audio_file_reader.cc 2025-09-28 10:12:28.117594728 +0200
+@@ -274,10 +274,10 @@ bool AudioFileReader::OnNewFrame(
+ // silence from being output. In the case where we are also discarding some
+ // portion of the packet (as indicated by a negative pts), we further want to
+ // adjust the duration downward by however much exists before zero.
+- if (audio_codec_ == AudioCodec::kAAC && frame->duration) {
++ if (audio_codec_ == AudioCodec::kAAC && frame->pkt_duration) {
+ const base::TimeDelta pkt_duration = ConvertFromTimeBase(
+ UNSAFE_TODO(glue_->format_context()->streams[stream_index_])->time_base,
+- frame->duration + std::min(static_cast<int64_t>(0), frame->pts));
++ frame->pkt_duration + std::min(static_cast<int64_t>(0), frame->pts));
+ const base::TimeDelta frame_duration =
+ base::Seconds(frames_read / static_cast<double>(sample_rate_));
+
diff --git a/chromium-141-revert-remove-darkmode-image-policy.patch b/chromium-141-revert-remove-darkmode-image-policy.patch
new file mode 100644
index 0000000..45891d5
--- /dev/null
+++ b/chromium-141-revert-remove-darkmode-image-policy.patch
@@ -0,0 +1,145 @@
+Revert it due to incorrect display of links on startpage
+
+commit 8e24867a503c142393388f117df94bb9b7c4b597
+Author: Prashant Nevase <pnevase@microsoft.com>
+Date: Mon Aug 18 10:26:18 2025 -0700
+
+ Remove dark mode kFilterNone image policy.
+
+ This cl removes DarkModeImagePolicy::kFilterNone and virtual tests
+ related to it. DarkModeImagePolicy::kFilterSmart is used as default.
+
+ Bug: 429404798
+ Change-Id: I5983aa8bca9ed4da110130f8bc49a184c7d339dc
+ Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6810968
+ Commit-Queue: Prashant Nevase <pnevase@microsoft.com>
+ Reviewed-by: Philip Rogers <pdr@chromium.org>
+ Cr-Commit-Position: refs/heads/main@{#1502799}
+
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index d4ed3585d95..62f30a3103c 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -813,19 +813,16 @@ const FeatureEntry::Choice kSafetyHubUnifiedPasswordsModuleChoices[] = {
+ #if !BUILDFLAG(IS_CHROMEOS)
+ const FeatureEntry::FeatureParam kForceDark_SimpleHsl[] = {
+ {"inversion_method", "hsl_based"},
+- {"image_behavior", "none"},
+ {"foreground_lightness_threshold", "150"},
+ {"background_lightness_threshold", "205"}};
+
+ const FeatureEntry::FeatureParam kForceDark_SimpleCielab[] = {
+ {"inversion_method", "cielab_based"},
+- {"image_behavior", "none"},
+ {"foreground_lightness_threshold", "150"},
+ {"background_lightness_threshold", "205"}};
+
+ const FeatureEntry::FeatureParam kForceDark_SimpleRgb[] = {
+ {"inversion_method", "rgb_based"},
+- {"image_behavior", "none"},
+ {"foreground_lightness_threshold", "150"},
+ {"background_lightness_threshold", "205"}};
+
+@@ -839,7 +836,6 @@ const FeatureEntry::FeatureParam kForceDark_SelectiveImageInversion[] = {
+
+ const FeatureEntry::FeatureParam kForceDark_SelectiveElementInversion[] = {
+ {"inversion_method", "cielab_based"},
+- {"image_behavior", "none"},
+ {"foreground_lightness_threshold", "150"},
+ {"background_lightness_threshold", "205"}};
+
+diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
+index 14409e52162..0af032f4dbf 100644
+--- a/third_party/blink/common/features.cc
++++ b/third_party/blink/common/features.cc
+@@ -1036,7 +1036,6 @@ const base::FeatureParam<ForceDarkImageBehavior>::Option
+ forcedark_image_behavior_options[] = {
+ {ForceDarkImageBehavior::kUseBlinkSettings,
+ "use_blink_settings_for_images"},
+- {ForceDarkImageBehavior::kInvertNone, "none"},
+ {ForceDarkImageBehavior::kInvertSelectively, "selective"}};
+
+ BASE_FEATURE_ENUM_PARAM(ForceDarkImageBehavior,
+diff --git a/third_party/blink/public/common/forcedark/forcedark_switches.h b/third_party/blink/public/common/forcedark/forcedark_switches.h
+index 9661628ce5c..ad606effc28 100644
+--- a/third_party/blink/public/common/forcedark/forcedark_switches.h
++++ b/third_party/blink/public/common/forcedark/forcedark_switches.h
+@@ -31,9 +31,6 @@ enum class ForceDarkImageBehavior {
+ // Same as ForceDarkInversionMethod::kUseBlinkSettings above.
+ kUseBlinkSettings,
+
+- // Do not invert any images.
+- kInvertNone,
+-
+ // Invert only some images. Images that act as icons or text should be
+ // inverted, but photos, avatars, etc. should not be.
+ kInvertSelectively
+diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc b/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc
+index 1929af787b7..7cb0924924a 100644
+--- a/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc
++++ b/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc
+@@ -205,7 +205,6 @@ void DarkModeFilter::ApplyFilterToImage(Image* image,
+ const SkRect& src) {
+ DCHECK(image);
+ DCHECK(flags);
+- DCHECK_NE(GetDarkModeImagePolicy(), DarkModeImagePolicy::kFilterNone);
+
+ // Raster-side dark mode path - Just set the dark mode on flags and dark
+ // mode will be applied at compositor side during rasterization.
+@@ -224,10 +223,6 @@ void DarkModeFilter::ApplyFilterToImage(Image* image,
+ }
+
+ bool DarkModeFilter::ShouldApplyFilterToImage(ImageType type) const {
+- DarkModeImagePolicy image_policy = GetDarkModeImagePolicy();
+- if (image_policy == DarkModeImagePolicy::kFilterNone)
+- return false;
+-
+ // kIcon: Do not consider images being drawn into bigger rect as these
+ // images are not meant for icons or representing smaller widgets. These
+ // images are considered as photos which should be untouched.
+@@ -241,7 +236,6 @@ bool DarkModeFilter::ShouldApplyFilterToImage(ImageType type) const {
+ sk_sp<cc::ColorFilter> DarkModeFilter::GenerateImageFilter(
+ const SkPixmap& pixmap,
+ const SkIRect& src) const {
+- DCHECK(immutable_.settings.image_policy == DarkModeImagePolicy::kFilterSmart);
+ DCHECK(immutable_.image_filter);
+
+ return (immutable_.image_classifier->Classify(pixmap, src) ==
+diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_settings.h b/third_party/blink/renderer/platform/graphics/dark_mode_settings.h
+index 19b3796f457..bce2653148a 100644
+--- a/third_party/blink/renderer/platform/graphics/dark_mode_settings.h
++++ b/third_party/blink/renderer/platform/graphics/dark_mode_settings.h
+@@ -21,10 +21,9 @@ enum class DarkModeInversionAlgorithm {
+ // This enum will be removed soon to make dark mode simpler.
+ enum class DarkModeImagePolicy {
+ kFilterSmart, // Apply dark-mode based on image content.
+- kFilterNone, // Never apply dark-mode filter to any images.
+
+ kFirst = kFilterSmart, // First enum value.
+- kLast = kFilterNone, // Last enum value.
++ kLast = kFilterSmart, // Last enum value.
+ };
+
+ enum class DarkModeImageClassifierPolicy {
+@@ -45,7 +44,7 @@ struct DarkModeSettings {
+ DarkModeInversionAlgorithm mode =
+ DarkModeInversionAlgorithm::kInvertLightnessLAB;
+ float contrast = 0.0; // Valid range from -1.0 to 1.0
+- DarkModeImagePolicy image_policy = DarkModeImagePolicy::kFilterNone;
++ DarkModeImagePolicy image_policy = DarkModeImagePolicy::kFilterSmart;
+ DarkModeImageClassifierPolicy image_classifier_policy =
+ DarkModeImageClassifierPolicy::kNumColorsWithMlFallback;
+
+diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_settings_builder.cc b/third_party/blink/renderer/platform/graphics/dark_mode_settings_builder.cc
+index 61498c0a809..318652cb2f2 100644
+--- a/third_party/blink/renderer/platform/graphics/dark_mode_settings_builder.cc
++++ b/third_party/blink/renderer/platform/graphics/dark_mode_settings_builder.cc
+@@ -115,8 +115,6 @@ DarkModeImagePolicy GetImagePolicy(const SwitchParams& switch_params) {
+ case ForceDarkImageBehavior::kUseBlinkSettings:
+ return GetIntegerSwitchParamValue<DarkModeImagePolicy>(
+ switch_params, "ImagePolicy", kDefaultDarkModeImagePolicy);
+- case ForceDarkImageBehavior::kInvertNone:
+- return DarkModeImagePolicy::kFilterNone;
+ case ForceDarkImageBehavior::kInvertSelectively:
+ return DarkModeImagePolicy::kFilterSmart;
+ }
diff --git a/chromium-141-rust-clanglib.patch b/chromium-141-rust-clanglib.patch
new file mode 100644
index 0000000..b9142c8
--- /dev/null
+++ b/chromium-141-rust-clanglib.patch
@@ -0,0 +1,60 @@
+diff -up chromium-141.0.7390.37/build/config/clang/BUILD.gn.rust-clang_lib chromium-141.0.7390.37/build/config/clang/BUILD.gn
+--- chromium-141.0.7390.37/build/config/clang/BUILD.gn.rust-clang_lib 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/build/config/clang/BUILD.gn 2025-09-27 12:15:44.380395911 +0200
+@@ -168,7 +168,21 @@ template("clang_lib") {
+ }
+ } else if (is_apple) {
+ _dir = "darwin"
+- } else if (is_linux || is_chromeos) {
++ } else if (is_linux) {
++ if (current_cpu == "x64") {
++ _dir = "x86_64-redhat-linux-gnu"
++ } else if (current_cpu == "x86") {
++ _dir = "i386-redhat-linux-gnu"
++ } else if (current_cpu == "arm64") {
++ _dir = "aarch64-redhat-linux-gnu"
++ } else if (current_cpu == "arm") {
++ _dir = "armhf-redhat-linux-gnu"
++ } else if (current_cpu == "ppc64") {
++ _dir = "ppc64le-redhat-linux-gnu"
++ } else {
++ assert(false) # Unhandled cpu type
++ }
++ } else if (is_chromeos) {
+ if (current_cpu == "x64") {
+ _dir = "x86_64-unknown-linux-gnu"
+ } else if (current_cpu == "x86") {
+diff -up chromium-141.0.7390.37/build/rust/rust_bindgen_generator.gni.rust-clang_lib chromium-141.0.7390.37/build/rust/rust_bindgen_generator.gni
+--- chromium-141.0.7390.37/build/rust/rust_bindgen_generator.gni.rust-clang_lib 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/build/rust/rust_bindgen_generator.gni 2025-09-27 11:41:29.777786734 +0200
+@@ -18,11 +18,11 @@ if (host_os == "win") {
+
+ # On Windows, the libclang.dll is beside the bindgen.exe, otherwise it is in
+ # ../lib.
+-_libclang_path = rust_bindgen_root
++_libclang_path = clang_base_path
+ if (host_os == "win") {
+ _libclang_path += "/bin"
+ } else {
+- _libclang_path += "/lib"
++ _libclang_path += "/lib64"
+ }
+
+ # Template to build Rust/C bindings with bindgen.
+diff -up chromium-141.0.7390.37/build/rust/rust_bindgen.gni.rust-clang_lib chromium-141.0.7390.37/build/rust/rust_bindgen.gni
+--- chromium-141.0.7390.37/build/rust/rust_bindgen.gni.rust-clang_lib 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/build/rust/rust_bindgen.gni 2025-09-27 11:41:29.777891843 +0200
+@@ -19,11 +19,11 @@ if (host_os == "win") {
+
+ # On Windows, the libclang.dll is beside the bindgen.exe, otherwise it is in
+ # ../lib.
+-_libclang_path = rust_bindgen_root
++_libclang_path = clang_base_path
+ if (host_os == "win") {
+ _libclang_path += "/bin"
+ } else {
+- _libclang_path += "/lib"
++ _libclang_path += "/lib64"
+ }
+
+ # Template to build Rust/C bindings with bindgen.
diff --git a/chromium-141-use_libcxx_modules.patch b/chromium-141-use_libcxx_modules.patch
new file mode 100644
index 0000000..919fb35
--- /dev/null
+++ b/chromium-141-use_libcxx_modules.patch
@@ -0,0 +1,28 @@
+Fix FTBFS
+
+../../build/modules/linux-x64/module.modulemap:11:12: error: header '../../linux/debian_bullseye_amd64-sysroot/usr/include/alloca.h' not found
+ 11 | header "../../linux/debian_bullseye_amd64-sysroot/usr/include/alloca.h"
+ | ^
+1 error generated
+
+diff -up chromium-141.0.7390.37/build/config/BUILDCONFIG.gn.me chromium-141.0.7390.37/build/config/BUILDCONFIG.gn
+--- chromium-141.0.7390.37/build/config/BUILDCONFIG.gn.me 2025-10-01 17:39:47.242174153 +0200
++++ chromium-141.0.7390.37/build/config/BUILDCONFIG.gn 2025-10-01 17:49:54.736578295 +0200
+@@ -557,6 +557,8 @@ foreach(_target_type,
+ ]) {
+ template(_target_type) {
+ target(_target_type, target_name) {
++ use_libcxx_modules = false
++
+ forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY)
+ forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
+ if (!defined(inputs)) {
+@@ -660,6 +662,8 @@ foreach(_target_type,
+ # TODO(crbug.com/326584510): Reclient doesn't respect this variable, see
+ # rbe_bug_326584510_missing_inputs in //build/config/clang/clang.gni
+ _uses_cflags = false
++ use_libcxx_modules = false
++
+ if (defined(sources)) {
+ foreach(f, sources) {
+ if (string_replace(f + ".END", ".cc.END", "") != f + ".END" ||
diff --git a/chromium-rust-no-alloc-shim-is-unstable.patch b/chromium-rust-no-alloc-shim-is-unstable.patch
index 6eea3be..8c5a339 100644
--- a/chromium-rust-no-alloc-shim-is-unstable.patch
+++ b/chromium-rust-no-alloc-shim-is-unstable.patch
@@ -1,20 +1,14 @@
-diff -up chromium-140.0.7339.207/build/rust/allocator/lib.rs.rust-no-alloc-shim-is-unstable chromium-140.0.7339.207/build/rust/allocator/lib.rs
---- chromium-140.0.7339.207/build/rust/allocator/lib.rs.rust-no-alloc-shim-is-unstable 2025-09-22 21:21:29.000000000 +0200
-+++ chromium-140.0.7339.207/build/rust/allocator/lib.rs 2025-09-26 13:51:35.967078280 +0200
-@@ -89,6 +89,12 @@ mod both_allocators {
- #[rustc_std_internal_symbol]
- #[linkage = "weak"]
- fn __rust_no_alloc_shim_is_unstable_v2() {}
-+
-+ #[rustc_std_internal_symbol]
-+ #[linkage = "weak"]
-+ fn __rust_alloc_error_handler_should_panic_v2() -> u8 {
-+ 0
-+ }
-
- // Mangle the symbol name as rustc expects.
- #[rustc_std_internal_symbol]
-@@ -96,6 +102,11 @@ mod both_allocators {
+Fix build errors:
+
+error[E0428]: the name `__rust_alloc_error_handler_should_panic_v2` is defined multiple times
+ --> ../../build/rust/allocator/lib.rs:101:5
+
+error: undefined symbol: __rust_no_alloc_shim_is_unstable
+
+diff -up chromium-141.0.7390.37/build/rust/allocator/lib.rs.rust-no-alloc-shim-is-unstable chromium-141.0.7390.37/build/rust/allocator/lib.rs
+--- chromium-141.0.7390.37/build/rust/allocator/lib.rs.rust-no-alloc-shim-is-unstable 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/build/rust/allocator/lib.rs 2025-09-27 15:14:54.661952048 +0200
+@@ -103,6 +103,11 @@ mod both_allocators {
#[linkage = "weak"]
static __rust_alloc_error_handler_should_panic: u8 = 0;
diff --git a/chromium.conf b/chromium.conf
index 8921703..1bd6582 100644
--- a/chromium.conf
+++ b/chromium.conf
@@ -1,6 +1,7 @@
# system wide chromium flags
ARCH="$(arch)"
+MODE="$(systemd-detect-virt)"
# GRAPHIC_DRIVER=[amd|intel|nvidia|default]
GRAPHIC_DRIVER=default
@@ -42,12 +43,20 @@ case "$GRAPHIC_DRIVER" in
;;
esac
+if [ "$MODE" != "none" ] ; then
+ # chromium in VM, running with standard setting
+ CHROMIUM_FLAGS=""
+ FEATURES=""
+fi
+
# Web Dark mode
if [ "$WEB_DARKMODE" == "on" ] ; then
darktype="WebContentsForceDark:inversion_method/cielab_based/image_behavior/none/foreground_lightness_threshold/150/background_lightness_threshold/205"
- FEATURES+=",$darktype"
+ if [ -z "$FEATURES" ] ; then
+ FEATURES+="$darktype"
+ else
+ FEATURES+=",$darktype"
+ fi
fi
-if [ "$ARCH" == "x86_64" ] ; then
- CHROMIUM_FLAGS+=" --enable-features=$FEATURES"
-fi
+[ -z "$FEATURES" ] || CHROMIUM_FLAGS+=" --enable-features=$FEATURES"
diff --git a/chromium.spec b/chromium.spec
index 4320da4..94ad0b6 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -95,7 +95,7 @@
%global remotingbuilddir out/Remoting
# enable|disable debuginfo
-%global enable_debug 0
+%global enable_debug 1
# disable debuginfo due to a bug in debugedit on el7
# error: canonicalization unexpectedly shrank by one character
# https://bugzilla.redhat.com/show_bug.cgi?id=304121
@@ -244,7 +244,7 @@
%endif
Name: chromium
-Version: 140.0.7339.207
+Version: 141.0.7390.54
Release: 1%{?dist}
Summary: A WebKit (Blink) powered web browser that Google doesn't want you to use
Url: http://www.chromium.org/Home
@@ -277,11 +277,17 @@ Patch91: chromium-108-system-opus.patch
# patch for Failed NodeJS version check
Patch92: chromium-138-checkversion-nodejs.patch
+# fix build error
+Patch93: chromium-141-csss_style_sheet.patch
+
+# Revert due to incorrect display of links on startpage in Darkmode
+Patch94: chromium-141-revert-remove-darkmode-image-policy.patch
+
# system ffmpeg
# need for old ffmpeg 5.x on epel9
Patch128: chromium-138-el9-ffmpeg-deprecated-apis.patch
Patch129: chromium-el9-ffmpeg-AV_CODEC_FLAG_COPY_OPAQUE.patch
-Patch130: chromium-107-ffmpeg-5.x-duration.patch
+Patch130: chromium-141-el9-ffmpeg-5.x-duration.patch
# disable the check
Patch131: chromium-107-proprietary-codecs.patch
# fix tab crash with SIGTRAP error when using system ffmpeg
@@ -350,11 +356,15 @@ Patch354: chromium-126-split-threshold-for-reg-with-hint.patch
# fix build error: no member named 'hardware_destructive_interference_size' in namespace 'std'
Patch355: chromium-130-hardware_destructive_interference_size.patch
+# fix build error:
+# ../../build/modules/linux-x64/module.modulemap:11:12: error: header '../../linux/debian_bullseye_amd64-sysroot/usr/include/alloca.h' not found
+Patch356: chromium-141-use_libcxx_modules.patch
+
# error: no matching member function for call to 'Append'
Patch357: chromium-134-type-mismatch-error.patch
# set clang_lib path
-Patch358: chromium-135-rust-clanglib.patch
+Patch358: chromium-141-rust-clanglib.patch
# PowerPC64 LE support
# Timothy Pearson's patchset
@@ -962,6 +972,8 @@ Qt6 UI for chromium.
%endif
%patch -P92 -p1 -b .nodejs-checkversion
+%patch -P93 -p1 -b .ftbfs-csss_style_sheet
+%patch -P94 -p1 -R -b .revert-remove-darkmode-image-policy
%if ! %{bundleffmpegfree}
%if 0%{?rhel} == 9
@@ -1021,6 +1033,8 @@ Qt6 UI for chromium.
%patch -P355 -p1 -b .hardware_destructive_interference_size
+%patch -P356 -p1 -b .disable_use_libcxx_modules
+
%patch -P357 -p1 -b .type-mismatch-error
%patch -P358 -p1 -b .rust-clang_lib
@@ -1269,6 +1283,8 @@ CHROMIUM_BROWSER_GN_DEFINES+=' media_use_openh264=false'
CHROMIUM_BROWSER_GN_DEFINES+=' rtc_use_h264=false'
%endif
CHROMIUM_BROWSER_GN_DEFINES+=' use_kerberos=true'
+# Workaround for FTBFS, error: no member named 'bPsnrY' in 'Source_Picture_s'
+CHROMIUM_BROWSER_GN_DEFINES+=' rtc_video_psnr=false'
%if %{use_qt5}
CHROMIUM_BROWSER_GN_DEFINES+=" use_qt5=true moc_qt5_path=\"$(%{_qt5_qmake} -query QT_HOST_BINS)\""
@@ -1705,6 +1721,21 @@ fi
%endif
%changelog
+* Thu Oct 02 2025 Than Ngo <than@redhat.com> - 141.0.7390.54-1
+- Update to 141.0.7390.54
+ * High CVE-2025-11205: Heap buffer overflow in WebGPU
+ * High CVE-2025-11206: Heap buffer overflow in Video
+ * Medium CVE-2025-11207: Side-channel information leakage in Storage
+ * Medium CVE-2025-11208: Inappropriate implementation in Media
+ * Medium CVE-2025-11209: Inappropriate implementation in Omnibox
+ * Medium CVE-2025-11210: Side-channel information leakage in Tab
+ * Medium CVE-2025-11211: Out of bounds read in Media
+ * Medium CVE-2025-11212: Inappropriate implementation in Media
+ * Medium CVE-2025-11213: Inappropriate implementation in Omnibox
+ * Medium CVE-2025-11215: Off by one error in V8
+ * Low CVE-2025-11216: Inappropriate implementation in Storage
+ * Low CVE-2025-11219: Use after free in V8
+
* Wed Sep 24 2025 Than Ngo <than@redhat.com> - 140.0.7339.207-1
- Update to 140.0.7339.207
* CVE-2025-10890: Side-channel information leakage in V8
diff --git a/fix-rustc.patch b/fix-rustc.patch
index f59f659..a3f4669 100644
--- a/fix-rustc.patch
+++ b/fix-rustc.patch
@@ -1,16 +1,13 @@
-author: Andres Salomon <dilinger@debian.org>
-description: allow ppc64le to build by using proper rustc target
-Index: chromium-140.0.7339.41/build/config/rust.gni
-===================================================================
---- chromium-140.0.7339.41.orig/build/config/rust.gni
-+++ chromium-140.0.7339.41/build/config/rust.gni
-@@ -186,6 +186,9 @@ if (is_linux || is_chromeos) {
+diff -up chromium-141.0.7390.37/build/config/rust.gni.fix-rustc chromium-141.0.7390.37/build/config/rust.gni
+--- chromium-141.0.7390.37/build/config/rust.gni.fix-rustc 2025-09-23 22:21:14.000000000 +0200
++++ chromium-141.0.7390.37/build/config/rust.gni 2025-09-28 10:23:04.982735749 +0200
+@@ -179,6 +179,9 @@ rust_abi_target = ""
+ if (is_linux || is_chromeos) {
if (current_cpu == "arm64") {
rust_abi_target = "aarch64-unknown-linux-gnu"
- cargo_target_abi = ""
+ } else if (current_cpu == "ppc64") {
+ rust_abi_target = "powerpc64le-unknown-linux-gnu"
+ cargo_target_abi = ""
} else if (current_cpu == "x86") {
rust_abi_target = "i686-unknown-linux-gnu"
- cargo_target_abi = ""
+ } else if (current_cpu == "x64") {
diff --git a/sources b/sources
index 405f500..af26658 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
SHA512 (node-v22.14.0-stripped.tar.gz) = affddb541009c6d378049c2d7845b981335d9e7aa387efcc472e5efb621c345cd58ca69778a394f7e4ebbb5e4b1a115a389838ef1b6458ef5e98f2071b166e15
-SHA512 (chromium-140.0.7339.207-clean.tar.xz) = 1319f55d79a827e443bdc53b18aef0cc014fefbea53f188e5d40e7e0ebe0a4b306fad5de98855ecef325b07cb3dbc1c079732e64ce71839792d3ac28801b200c
+SHA512 (chromium-141.0.7390.54-clean.tar.xz) = 465fb02dec3835f80059e47b5c0cc4efbd84385db53c382f0cf3fa32b02089a9ec95cba7a26053f2b3cfb63f44e6ed9c16463f9384f784362d20ef1703b7ab18
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-07 16:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-07 16:08 [rpms/chromium] epel9-next: - Update to 141.0.7390.54 Than Ngo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox