Add explicit null checks to some stdio functions.
Applications fopening files and then blindly trying to read are
widespread, leading to a recurring problem of SELinux tightening
resulting in segfaults. Add a friendly diagnostic for this case.
Bug: http://b/67455242
Test: bionic-unit-tests32/64 on sailfish
Change-Id: I1734fa94487c4eff9b55a02c6b01baf6b265d236
diff --git a/libc/stdio/local.h b/libc/stdio/local.h
index bf6a8f8..02ea8f8 100644
--- a/libc/stdio/local.h
+++ b/libc/stdio/local.h
@@ -38,6 +38,9 @@
#include <pthread.h>
#include <stdbool.h>
#include <wchar.h>
+
+#include <async_safe/log.h>
+
#include "wcio.h"
/*
@@ -252,4 +255,13 @@
__END_DECLS
+// Sanity check a FILE* for nullptr, so we can emit a message while crashing
+// instead of doing a blind null-dereference.
+#define CHECK_FP(fp) \
+ do { \
+ if (__predict_false(fp == 0)) { \
+ async_safe_fatal("invalid FILE* %p passed to %s", fp, __FUNCTION__); \
+ } \
+ } while (0)
+
#endif