parent
6c5bbae7b3
commit
d3332fc92f
|
@ -6047,6 +6047,21 @@ INTERCEPTOR(void *, getutxline, void *ut) {
|
|||
#define INIT_UTMPX
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_GETLOADAVG
|
||||
INTERCEPTOR(int, getloadavg, double *loadavg, int nelem) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, getloadavg, loadavg, nelem);
|
||||
int res = REAL(getloadavg)(loadavg, nelem);
|
||||
if (res > 0)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, loadavg, res * sizeof(*loadavg));
|
||||
return res;
|
||||
}
|
||||
#define INIT_GETLOADAVG \
|
||||
COMMON_INTERCEPT_FUNCTION(getloadavg);
|
||||
#else
|
||||
#define INIT_GETLOADAVG
|
||||
#endif
|
||||
|
||||
static void InitializeCommonInterceptors() {
|
||||
static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1];
|
||||
interceptor_metadata_map = new((void *)&metadata_mem) MetadataHashMap();
|
||||
|
@ -6245,4 +6260,5 @@ static void InitializeCommonInterceptors() {
|
|||
// FIXME: add other *stat interceptors.
|
||||
INIT_UTMP;
|
||||
INIT_UTMPX;
|
||||
INIT_GETLOADAVG;
|
||||
}
|
||||
|
|
|
@ -326,6 +326,9 @@
|
|||
#define SANITIZER_INTERCEPT_UTMP SI_NOT_WINDOWS && !SI_MAC && !SI_FREEBSD
|
||||
#define SANITIZER_INTERCEPT_UTMPX SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD
|
||||
|
||||
#define SANITIZER_INTERCEPT_GETLOADAVG \
|
||||
SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD
|
||||
|
||||
#define SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO (!SI_FREEBSD && !SI_MAC)
|
||||
#define SANITIZER_INTERCEPT_MEMALIGN (!SI_FREEBSD && !SI_MAC)
|
||||
#define SANITIZER_INTERCEPT_PVALLOC (!SI_FREEBSD && !SI_MAC)
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t
|
||||
|
||||
#define _BSD_SOURCE
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <sanitizer/msan_interface.h>
|
||||
|
||||
int main(void) {
|
||||
double x[4];
|
||||
int ret = getloadavg(x, 3);
|
||||
assert(ret > 0);
|
||||
assert(ret <= 3);
|
||||
assert(__msan_test_shadow(x, sizeof(double) * ret) == -1);
|
||||
assert(__msan_test_shadow(&x[ret], sizeof(double)) == 0);
|
||||
}
|
Loading…
Reference in New Issue