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