1*4882a593SmuzhiyunFrom 1b90c61f1fd4d83054a60ed5d21c6f76f1d23925 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Khem Raj <raj.khem@gmail.com> 3*4882a593SmuzhiyunDate: Wed, 11 Aug 2021 20:08:33 -0700 4*4882a593SmuzhiyunSubject: [PATCH] provide __close on musl 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunUpstream-Status: Pending 7*4882a593SmuzhiyunSigned-off-by: Khem Raj <raj.khem@gmail.com> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun--- 10*4882a593Smuzhiyun base/files/scoped_file_linux.cc | 14 ++++++++++++-- 11*4882a593Smuzhiyun 1 file changed, 12 insertions(+), 2 deletions(-) 12*4882a593Smuzhiyun 13*4882a593Smuzhiyundiff --git a/base/files/scoped_file_linux.cc b/base/files/scoped_file_linux.cc 14*4882a593Smuzhiyunindex e72b5b7248..958f7c2823 100644 15*4882a593Smuzhiyun--- a/base/files/scoped_file_linux.cc 16*4882a593Smuzhiyun+++ b/base/files/scoped_file_linux.cc 17*4882a593Smuzhiyun@@ -7,6 +7,7 @@ 18*4882a593Smuzhiyun #include <algorithm> 19*4882a593Smuzhiyun #include <array> 20*4882a593Smuzhiyun #include <atomic> 21*4882a593Smuzhiyun+#include <dlfcn.h> 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #include "base/compiler_specific.h" 24*4882a593Smuzhiyun #include "base/debug/stack_trace.h" 25*4882a593Smuzhiyun@@ -81,9 +82,18 @@ bool IsFDOwned(int fd) { 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun extern "C" { 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun-int __close(int); 30*4882a593Smuzhiyun- 31*4882a593Smuzhiyun __attribute__((visibility("default"), noinline)) int close(int fd) { 32*4882a593Smuzhiyun+ static int (*__close)(int) = nullptr; 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun+ if (__close == nullptr) { 35*4882a593Smuzhiyun+ __close = (int (*)(int))dlsym(RTLD_NEXT, "close"); 36*4882a593Smuzhiyun+ 37*4882a593Smuzhiyun+ if (__close == nullptr) { 38*4882a593Smuzhiyun+ RAW_LOG(ERROR, "musl close not found\n"); 39*4882a593Smuzhiyun+ IMMEDIATE_CRASH(); 40*4882a593Smuzhiyun+ } 41*4882a593Smuzhiyun+ } 42*4882a593Smuzhiyun+ 43*4882a593Smuzhiyun if (base::IsFDOwned(fd) && g_is_ownership_enforced) 44*4882a593Smuzhiyun CrashOnFdOwnershipViolation(); 45*4882a593Smuzhiyun return __close(fd); 46