diff --git a/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp b/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
index fbc6762..0636883 100644
--- a/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
@@ -10,6 +10,8 @@
 #include "clang/AST/ASTContext.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
 
+#include "llvm/ADT/StringSet.h"
+
 using namespace clang::ast_matchers;
 
 namespace clang {
@@ -30,6 +32,13 @@
       declRefExpr(to(functionDecl().bind("func"))).bind("use-site"), this);
 }
 
+// A list of functions that are exempted from this check. The __errno_location
+// function is for setting errno, which is allowed in libc, and the other
+// functions are specifically allowed to be external so that they can be
+// intercepted.
+static const llvm::StringSet<> IgnoredFunctions = {
+    "__errno_location", "malloc", "calloc", "realloc", "free", "aligned_alloc"};
+
 void CalleeNamespaceCheck::check(const MatchFinder::MatchResult &Result) {
   const auto *UsageSiteExpr = Result.Nodes.getNodeAs<DeclRefExpr>("use-site");
   const auto *FuncDecl = Result.Nodes.getNodeAs<FunctionDecl>("func");
@@ -43,6 +52,9 @@
   if (NS && NS->getName() == "__llvm_libc")
     return;
 
+  if (IgnoredFunctions.contains(FuncDecl->getName()))
+    return;
+
   diag(UsageSiteExpr->getBeginLoc(), "%0 must resolve to a function declared "
                                      "within the '__llvm_libc' namespace")
       << FuncDecl;
diff --git a/clang-tools-extra/test/clang-tidy/checkers/llvmlibc-callee-namespace.cpp b/clang-tools-extra/test/clang-tidy/checkers/llvmlibc-callee-namespace.cpp
index b7fee5d..8ee9684 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/llvmlibc-callee-namespace.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/llvmlibc-callee-namespace.cpp
@@ -10,6 +10,9 @@
 // Emulate a function from the public headers like string.h
 void libc_api_func() {}
 
+// Emulate a function specifically allowed by the exception list.
+void malloc() {}
+
 namespace __llvm_libc {
 void Test() {
   // Allow calls with the fully qualified name.
@@ -37,6 +40,9 @@
   badPtr();
   // CHECK-MESSAGES: :[[@LINE-2]]:26: warning: 'libc_api_func' must resolve to a function declared within the '__llvm_libc' namespace
   // CHECK-MESSAGES: :11:6: note: resolves to this declaration
+
+  // Allow calling into global namespace for specific functions.
+  ::malloc();
 }
 
 } // namespace __llvm_libc
diff --git a/libc/docs/clang_tidy_checks.rst b/libc/docs/clang_tidy_checks.rst
index ffdc45b..0148067 100644
--- a/libc/docs/clang_tidy_checks.rst
+++ b/libc/docs/clang_tidy_checks.rst
@@ -67,6 +67,11 @@
 This check ensures any function call resolves to a function within the
 __llvm_libc namespace.
 
+There are exceptions for the following functions: 
+``__errno_location`` so that ``errno`` can be set;
+``malloc``, ``calloc``, ``realloc``, ``aligned_alloc``, and ``free`` since they
+are always external and can be intercepted.
+
 .. code-block:: c++
 
     namespace __llvm_libc {
@@ -83,4 +88,7 @@
     // Disallow calling into functions in the global namespace.
     ::strlen("!");
 
+    // Allow calling into specific global functions (explained above)
+    ::malloc(10);
+
     } // namespace __llvm_libc
diff --git a/libc/src/__support/FPUtil/NearestIntegerOperations.h b/libc/src/__support/FPUtil/NearestIntegerOperations.h
index 99e2ba7..6862488 100644
--- a/libc/src/__support/FPUtil/NearestIntegerOperations.h
+++ b/libc/src/__support/FPUtil/NearestIntegerOperations.h
@@ -246,7 +246,7 @@
   FPBits<F> bits(x);
   auto setDomainErrorAndRaiseInvalid = []() {
 #if math_errhandling & MATH_ERRNO
-    errno = EDOM; // NOLINT
+    errno = EDOM;
 #endif
 #if math_errhandling & MATH_ERREXCEPT
     raiseExcept(FE_INVALID);
diff --git a/libc/src/__support/str_to_float.h b/libc/src/__support/str_to_float.h
index 7c26720..7673334 100644
--- a/libc/src/__support/str_to_float.h
+++ b/libc/src/__support/str_to_float.h
@@ -200,7 +200,7 @@
           static_cast<int64_t>(fputil::FloatProperties<T>::exponentBias)) {
     *outputMantissa = 0;
     *outputExp2 = fputil::FPBits<T>::maxExponent;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
   // If the exponent is too small even for a subnormal, return 0.
@@ -210,7 +210,7 @@
                                fputil::FloatProperties<T>::mantissaWidth)) {
     *outputMantissa = 0;
     *outputExp2 = 0;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -253,7 +253,7 @@
   if (exp2 >= fputil::FPBits<T>::maxExponent) {
     *outputMantissa = 0;
     *outputExp2 = fputil::FPBits<T>::maxExponent;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -289,7 +289,7 @@
   }
 
   if (exp2 == 0) {
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
   }
 
   *outputMantissa = finalMantissa;
@@ -391,7 +391,7 @@
       static_cast<int64_t>(fputil::FloatProperties<T>::exponentBias) / 3) {
     *outputMantissa = 0;
     *outputExp2 = fputil::FPBits<T>::maxExponent;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
   // If the exponent is too small even for a subnormal, return 0.
@@ -402,7 +402,7 @@
               2) {
     *outputMantissa = 0;
     *outputExp2 = 0;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -467,7 +467,7 @@
     // This indicates an overflow, so we make the result INF and set errno.
     *outputExp2 = (1 << fputil::FloatProperties<T>::exponentWidth) - 1;
     *outputMantissa = 0;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -483,7 +483,7 @@
       // Return 0 if the exponent is too small.
       *outputMantissa = 0;
       *outputExp2 = 0;
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
       return;
     }
   }
@@ -511,12 +511,12 @@
     ++biasedExponent;
 
     if (biasedExponent == INF_EXP) {
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
     }
   }
 
   if (biasedExponent == 0) {
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
   }
 
   *outputMantissa = mantissa & fputil::FloatProperties<T>::mantissaMask;
diff --git a/libc/src/__support/str_to_integer.h b/libc/src/__support/str_to_integer.h
index ec7f6f5..3ecf098 100644
--- a/libc/src/__support/str_to_integer.h
+++ b/libc/src/__support/str_to_integer.h
@@ -74,7 +74,7 @@
   const char *original_src = src;
 
   if (base < 0 || base == 1 || base > 36) {
-    errno = EINVAL; // NOLINT
+    errno = EINVAL;
     return 0;
   }
 
@@ -114,19 +114,19 @@
     // the result cannot change, but we still need to advance src to the end of
     // the number.
     if (result == ABS_MAX) {
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
       continue;
     }
 
     if (result > ABS_MAX_DIV_BY_BASE) {
       result = ABS_MAX;
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
     } else {
       result = result * base;
     }
     if (result > ABS_MAX - cur_digit) {
       result = ABS_MAX;
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
     } else {
       result = result + cur_digit;
     }
diff --git a/libc/src/math/generic/math_utils.h b/libc/src/math/generic/math_utils.h
index ef86e88..11c2bd1 100644
--- a/libc/src/math/generic/math_utils.h
+++ b/libc/src/math/generic/math_utils.h
@@ -55,7 +55,7 @@
 
 template <typename T> static inline T with_errno(T x, int err) {
   if (math_errhandling & MATH_ERRNO)
-    errno = err; // NOLINT
+    errno = err;
   return x;
 }
 
diff --git a/libc/src/string/strdup.cpp b/libc/src/string/strdup.cpp
index ddda3a6..ee324b0 100644
--- a/libc/src/string/strdup.cpp
+++ b/libc/src/string/strdup.cpp
@@ -21,7 +21,7 @@
     return nullptr;
   }
   size_t len = internal::string_length(src) + 1;
-  char *dest = reinterpret_cast<char *>(::malloc(len)); // NOLINT
+  char *dest = reinterpret_cast<char *>(::malloc(len));
   if (dest == nullptr) {
     return nullptr;
   }
diff --git a/libc/src/string/strndup.cpp b/libc/src/string/strndup.cpp
index d8e0818..4856a48 100644
--- a/libc/src/string/strndup.cpp
+++ b/libc/src/string/strndup.cpp
@@ -23,7 +23,7 @@
   size_t len = internal::string_length(src);
   if (len > size)
     len = size;
-  char *dest = reinterpret_cast<char *>(::malloc(len + 1)); // NOLINT
+  char *dest = reinterpret_cast<char *>(::malloc(len + 1));
   if (dest == nullptr)
     return nullptr;
   inline_memcpy(dest, src, len + 1);
