[compiler-rt] d83d1cb - [compiler-rt] making getrandom call blocking. (#78340)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 17 21:46:54 PST 2024


Author: David CARLIER
Date: 2024-01-18T05:46:50Z
New Revision: d83d1cb89cf80cda9d85e61c7b43f69446638865

URL: https://github.com/llvm/llvm-project/commit/d83d1cb89cf80cda9d85e61c7b43f69446638865
DIFF: https://github.com/llvm/llvm-project/commit/d83d1cb89cf80cda9d85e61c7b43f69446638865.diff

LOG: [compiler-rt] making getrandom call blocking. (#78340)

except when `GRND_NONBLOCK` is present in the flags.

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
index 77fa1b4965a7a4b..1b56bebac64e685 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
@@ -9965,7 +9965,13 @@ INTERCEPTOR(void, sl_free, void *sl, int freeall) {
 INTERCEPTOR(SSIZE_T, getrandom, void *buf, SIZE_T buflen, unsigned int flags) {
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, getrandom, buf, buflen, flags);
-  SSIZE_T n = REAL(getrandom)(buf, buflen, flags);
+  // If GRND_NONBLOCK is set in the flags, it is non blocking.
+  static const int grnd_nonblock = 1; 
+  SSIZE_T n;
+  if ((flags & grnd_nonblock))
+    n = REAL(getrandom)(buf, buflen, flags);
+  else
+    n = COMMON_INTERCEPTOR_BLOCK_REAL(getrandom)(buf, buflen, flags);
   if (n > 0) {
     COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, n);
   }


        


More information about the llvm-commits mailing list