diff --git a/.gitignore b/.gitignore
index f94b732..40c6e92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@
 /third_party/libjpeg_turbo
 /third_party/llvm
 /third_party/llvm-build
+/third_party/lss
 /third_party/markupsafe
 /third_party/nasm
 /third_party/skia
diff --git a/DEPS b/DEPS
index 94cd569..63f64b5 100644
--- a/DEPS
+++ b/DEPS
@@ -112,6 +112,10 @@
   # and whatever else without interference from each other.
   'libunwind_revision': '42aa6de5544ec1ccc27da640a044bd3f474ee75a',
   # Three lines of non-changing comments so that
+  # the commit queue can handle CLs rolling lss
+  # and whatever else without interference from each other.
+  'lss_revision': '0d6435b731ef91d5182eaecff82ae96764222c48',
+  # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling markupsafe
   # and whatever else without interference from each other.
   'markupsafe_revision': '1b882ef6372b58bfd55a3285f37ed801be9137cd',
@@ -120,6 +124,10 @@
   # and whatever else without interference from each other.
   'nasm_source_revision': '9215e8e1d0fe474ffd3e16c1a07a0f97089e6224',
   # Three lines of non-changing comments so that
+  # the commit queue can handle CLs rolling partition_allocator
+  # and whatever else without interference from each other.
+  'partition_allocator_revision': 'd47a38e4a0a8220648fba8e9ddfc046a04f8788d',
+  # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling pdfium_tests
   # and whatever else without interference from each other.
   'pdfium_tests_revision': 'b9373ffb65b305827e0ceb85bfaec40dd7122032',
@@ -159,6 +167,11 @@
 ]
 
 deps = {
+  'base/allocator/partition_allocator':
+    Var('chromium_git') +
+        '/chromium/src/base/allocator/partition_allocator.git@' +
+        Var('partition_allocator_revision'),
+
   'base/trace_event/common':
     Var('chromium_git') + '/chromium/src/base/trace_event/common.git@' +
         Var('trace_event_revision'),
@@ -282,6 +295,11 @@
     Var('chromium_git') + '/chromium/deps/libjpeg_turbo.git@' +
         Var('jpeg_turbo_revision'),
 
+  'third_party/lss': {
+      'url': Var('chromium_git') + '/linux-syscall-support.git' + '@' + Var('lss_revision'),
+      'condition': 'checkout_android or checkout_linux',
+  },
+
   'third_party/markupsafe':
     Var('chromium_git') + '/chromium/src/third_party/markupsafe.git@' +
         Var('markupsafe_revision'),
diff --git a/build_overrides/partition_alloc.gni b/build_overrides/partition_alloc.gni
new file mode 100644
index 0000000..0cf7009
--- /dev/null
+++ b/build_overrides/partition_alloc.gni
@@ -0,0 +1,11 @@
+# Copyright 2022 The PDFium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# See base/allocator/partition_allocator/external_builds.md
+use_partition_alloc_as_malloc_default = false
+enable_mte_checked_ptr_support_default = false
+enable_backup_ref_ptr_support_default = false
+put_ref_count_in_previous_slot_default = false
+enable_backup_ref_ptr_slow_checks_default = false
+enable_dangling_raw_ptr_checks_default = false
diff --git a/core/fxcrt/BUILD.gn b/core/fxcrt/BUILD.gn
index d1389e6..d926496 100644
--- a/core/fxcrt/BUILD.gn
+++ b/core/fxcrt/BUILD.gn
@@ -133,7 +133,7 @@
   ]
   if (pdf_use_partition_alloc) {
     sources += [ "fx_memory_pa.cpp" ]
-    deps += [ "../../third_party:pdfium_partition_alloc" ]
+    deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
   } else {
     sources += [ "fx_memory_malloc.cpp" ]
   }
diff --git a/core/fxcrt/DEPS b/core/fxcrt/DEPS
index 2be0352..5b61cbd 100644
--- a/core/fxcrt/DEPS
+++ b/core/fxcrt/DEPS
@@ -1,3 +1,4 @@
 include_rules = [
+  '+base/allocator',
   '+third_party/icu',
 ]
diff --git a/core/fxcrt/fx_memory_pa.cpp b/core/fxcrt/fx_memory_pa.cpp
index fc993a5..b661249 100644
--- a/core/fxcrt/fx_memory_pa.cpp
+++ b/core/fxcrt/fx_memory_pa.cpp
@@ -6,26 +6,36 @@
 
 #include "core/fxcrt/fx_memory.h"
 
+#include "base/allocator/partition_allocator/partition_alloc.h"
 #include "core/fxcrt/fx_safe_types.h"
-#include "third_party/base/allocator/partition_allocator/partition_alloc.h"
 #include "third_party/base/no_destructor.h"
 
 namespace {
 
-pdfium::base::PartitionAllocatorGeneric& GetArrayBufferPartitionAllocator() {
-  static pdfium::base::NoDestructor<pdfium::base::PartitionAllocatorGeneric>
+constexpr partition_alloc::PartitionOptions kOptions = {
+    partition_alloc::PartitionOptions::AlignedAlloc::kDisallowed,
+    partition_alloc::PartitionOptions::ThreadCache::kDisabled,
+    partition_alloc::PartitionOptions::Quarantine::kDisallowed,
+    partition_alloc::PartitionOptions::Cookie::kAllowed,
+    partition_alloc::PartitionOptions::BackupRefPtr::kDisabled,
+    partition_alloc::PartitionOptions::BackupRefPtrZapping::kDisabled,
+    partition_alloc::PartitionOptions::UseConfigurablePool::kNo,
+};
+
+partition_alloc::PartitionAllocator& GetArrayBufferPartitionAllocator() {
+  static pdfium::base::NoDestructor<partition_alloc::PartitionAllocator>
       s_array_buffer_allocator;
   return *s_array_buffer_allocator;
 }
 
-pdfium::base::PartitionAllocatorGeneric& GetGeneralPartitionAllocator() {
-  static pdfium::base::NoDestructor<pdfium::base::PartitionAllocatorGeneric>
+partition_alloc::PartitionAllocator& GetGeneralPartitionAllocator() {
+  static pdfium::base::NoDestructor<partition_alloc::PartitionAllocator>
       s_general_allocator;
   return *s_general_allocator;
 }
 
-pdfium::base::PartitionAllocatorGeneric& GetStringPartitionAllocator() {
-  static pdfium::base::NoDestructor<pdfium::base::PartitionAllocatorGeneric>
+partition_alloc::PartitionAllocator& GetStringPartitionAllocator() {
+  static pdfium::base::NoDestructor<partition_alloc::PartitionAllocator>
       s_string_allocator;
   return *s_string_allocator;
 }
@@ -40,9 +50,9 @@
   total *= num_members;
   if (!total.IsValid())
     return nullptr;
-  constexpr int kFlags = pdfium::base::PartitionAllocReturnNull;
-  return pdfium::base::PartitionAllocGenericFlags(
-      GetGeneralPartitionAllocator().root(), kFlags, total.ValueOrDie(),
+
+  return GetGeneralPartitionAllocator().root()->AllocWithFlags(
+      partition_alloc::AllocFlags::kReturnNull, total.ValueOrDie(),
       "GeneralPartition");
 }
 
@@ -52,11 +62,10 @@
   if (!total.IsValid())
     return nullptr;
 
-  constexpr int kFlags = pdfium::base::PartitionAllocReturnNull |
-                         pdfium::base::PartitionAllocZeroFill;
-  return pdfium::base::PartitionAllocGenericFlags(
-      GetGeneralPartitionAllocator().root(), kFlags, total.ValueOrDie(),
-      "GeneralPartition");
+  return GetGeneralPartitionAllocator().root()->AllocWithFlags(
+      partition_alloc::AllocFlags::kReturnNull |
+          partition_alloc::AllocFlags::kZeroFill,
+      total.ValueOrDie(), "GeneralPartition");
 }
 
 void* Realloc(void* ptr, size_t num_members, size_t member_size) {
@@ -65,9 +74,8 @@
   if (!size.IsValid())
     return nullptr;
 
-  return pdfium::base::PartitionReallocGenericFlags(
-      GetGeneralPartitionAllocator().root(),
-      pdfium::base::PartitionAllocReturnNull, ptr, size.ValueOrDie(),
+  return GetGeneralPartitionAllocator().root()->ReallocWithFlags(
+      partition_alloc::AllocFlags::kReturnNull, ptr, size.ValueOrDie(),
       "GeneralPartition");
 }
 
@@ -77,9 +85,8 @@
   if (!total.IsValid())
     return nullptr;
 
-  constexpr int kFlags = pdfium::base::PartitionAllocReturnNull;
-  return pdfium::base::PartitionAllocGenericFlags(
-      GetStringPartitionAllocator().root(), kFlags, total.ValueOrDie(),
+  return GetStringPartitionAllocator().root()->AllocWithFlags(
+      partition_alloc::AllocFlags::kReturnNull, total.ValueOrDie(),
       "StringPartition");
 }
 
@@ -89,17 +96,17 @@
 void FX_InitializeMemoryAllocators() {
   static bool s_partition_allocators_initialized = false;
   if (!s_partition_allocators_initialized) {
-    pdfium::base::PartitionAllocGlobalInit(FX_OutOfMemoryTerminate);
-    GetArrayBufferPartitionAllocator().init();
-    GetGeneralPartitionAllocator().init();
-    GetStringPartitionAllocator().init();
+    partition_alloc::PartitionAllocGlobalInit(FX_OutOfMemoryTerminate);
+    GetArrayBufferPartitionAllocator().init(kOptions);
+    GetGeneralPartitionAllocator().init(kOptions);
+    GetStringPartitionAllocator().init(kOptions);
     s_partition_allocators_initialized = true;
   }
 }
 
 void* FX_ArrayBufferAllocate(size_t length) {
-  return GetArrayBufferPartitionAllocator().root()->AllocFlags(
-      pdfium::base::PartitionAllocZeroFill, length, "FXArrayBuffer");
+  return GetArrayBufferPartitionAllocator().root()->AllocWithFlags(
+      partition_alloc::AllocFlags::kZeroFill, length, "FXArrayBuffer");
 }
 
 void* FX_ArrayBufferAllocateUninitialized(size_t length) {
@@ -121,5 +128,5 @@
   // So this check is hiding (what I consider to be) bugs, and we should try to
   // fix them. https://bugs.chromium.org/p/pdfium/issues/detail?id=690
   if (ptr)
-    pdfium::base::PartitionFree(ptr);
+    partition_alloc::ThreadSafePartitionRoot::Free(ptr);
 }
