Skip to content

Commit fb1ac4e

Browse files
committed
MSAN support
1 parent f283455 commit fb1ac4e

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

Zend/zend_execute.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
#include "zend_types.h"
2828
#include "zend_variables.h"
2929
#include "zend_constants.h"
30-
#include "zend_asan.h"
30+
#include "zend_sanitizers.h"
3131

3232
#include <stdint.h>
3333

Zend/zend_fibers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include "zend_compile.h"
3131
#include "zend_closures.h"
3232
#include "zend_generators.h"
33-
#include "zend_asan.h"
33+
#include "zend_sanitizers.h"
3434

3535
#include "zend_fibers.h"
3636
#include "zend_fibers_arginfo.h"
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
+----------------------------------------------------------------------+
1515
*/
1616

17-
#ifndef ZEND_ASAN_H
18-
#define ZEND_ASAN_H
17+
#ifndef ZEND_SANITIZERS_H
18+
#define ZEND_SANITIZERS_H
1919

2020
#include "zend_portability.h"
2121

@@ -26,14 +26,27 @@
2626
# define ASAN_UNPOISON_MEMORY_REGION(_ptr, _size)
2727
#endif
2828

29+
#if __has_feature(memory_sanitizer)
30+
# include <sanitizer/msan_interface.h>
31+
# define MSAN_POISON_MEMORY_REGION(_ptr, _size) __msan_allocated_memory(_ptr, _size)
32+
# define MSAN_UNPOISON_MEMORY_REGION(_ptr, _size) __msan_unpoison(_ptr, _size)
33+
#else
34+
# define MSAN_POISON_MEMORY_REGION(_ptr, _size)
35+
# define MSAN_UNPOISON_MEMORY_REGION(_ptr, _size)
36+
#endif
37+
38+
/* Mark memory region as unaddressable (ASAN) and uninitialized (MSAN) */
2939
#define ZEND_POISON_MEMORY_REGION(_ptr, _size) do { \
3040
ZEND_ASSERT(!(((uintptr_t) (_ptr)) & 7)); \
3141
ASAN_POISON_MEMORY_REGION((_ptr), (_size)); \
42+
MSAN_POISON_MEMORY_REGION((_ptr), (_size)); \
3243
} while (0);
3344

45+
/* Mark memory region as addressable (ASAN) without changing initialization state (MSAN) */
3446
#define ZEND_UNPOISON_MEMORY_REGION(_ptr, _size) do { \
3547
ZEND_ASSERT(!(((uintptr_t) (_ptr)) & 7)); \
3648
ASAN_UNPOISON_MEMORY_REGION((_ptr), (_size)); \
49+
/* No MSAN_UNPOISON_MEMORY_REGION */ \
3750
} while (0);
3851

39-
#endif /* ZEND_ASAN_H */
52+
#endif /* ZEND_SANITIZERS_H */

ext/opcache/jit/zend_jit_helpers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
#include "Zend/zend_API.h"
20-
#include "Zend/zend_asan.h"
20+
#include "Zend/zend_sanitizers.h"
2121

2222
static ZEND_COLD void undef_result_after_exception(void) {
2323
const zend_op *opline = EG(opline_before_exception);

0 commit comments

Comments
 (0)