Skip to content

Commit

Permalink
Apply LOCAL_PATCHES and remove not used ones.
Browse files Browse the repository at this point in the history
2018-10-31  Martin Liska  <mliska@suse.cz>

	* LOCAL_PATCHES: Update patch list.
	* asan/asan_globals.cc (CheckODRViolationViaIndicator): Apply
	patches from GCC's trunk.
	(CheckODRViolationViaPoisoning): Likewise.
	(RegisterGlobal): Likewise.
	* sanitizer_common/sanitizer_mac.cc (defined): Likewise.
	* sanitizer_common/sanitizer_stacktrace.cc (GetCanonicFrame): Likewise.
	* ubsan/ubsan_handlers.cc (__ubsan::__ubsan_handle_cfi_bad_icall): Likewise.
	(__ubsan::__ubsan_handle_cfi_bad_icall_abort): Likewise.
	* ubsan/ubsan_handlers.h (struct CFIBadIcallData): Likewise.
	(struct CFICheckFailData): Likewise.
	(RECOVERABLE): Likewise.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265667 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
marxin committed Oct 31, 2018
1 parent 0921f0f commit 87ccb23
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 24 deletions.
15 changes: 15 additions & 0 deletions libsanitizer/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
2018-10-31 Martin Liska <mliska@suse.cz>

* LOCAL_PATCHES: Update patch list.
* asan/asan_globals.cc (CheckODRViolationViaIndicator): Apply
patches from GCC's trunk.
(CheckODRViolationViaPoisoning): Likewise.
(RegisterGlobal): Likewise.
* sanitizer_common/sanitizer_mac.cc (defined): Likewise.
* sanitizer_common/sanitizer_stacktrace.cc (GetCanonicFrame): Likewise.
* ubsan/ubsan_handlers.cc (__ubsan::__ubsan_handle_cfi_bad_icall): Likewise.
(__ubsan::__ubsan_handle_cfi_bad_icall_abort): Likewise.
* ubsan/ubsan_handlers.h (struct CFIBadIcallData): Likewise.
(struct CFICheckFailData): Likewise.
(RECOVERABLE): Likewise.

2018-10-31 Martin Liska <mliska@suse.cz>

* config.h.in: Regenerate.
Expand Down
2 changes: 0 additions & 2 deletions libsanitizer/LOCAL_PATCHES
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
r241978
r241980
r241981
r242478
r242633
r243014
19 changes: 0 additions & 19 deletions libsanitizer/asan/asan_globals.cc
Original file line number Diff line number Diff line change
Expand Up @@ -147,23 +147,6 @@ static void CheckODRViolationViaIndicator(const Global *g) {
}
}

// Check ODR violation for given global G by checking if it's already poisoned.
// We use this method in case compiler doesn't use private aliases for global
// variables.
static void CheckODRViolationViaPoisoning(const Global *g) {
if (__asan_region_is_poisoned(g->beg, g->size_with_redzone)) {
// This check may not be enough: if the first global is much larger
// the entire redzone of the second global may be within the first global.
for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
if (g->beg == l->g->beg &&
(flags()->detect_odr_violation >= 2 || g->size != l->g->size) &&
!IsODRViolationSuppressed(g->name))
ReportODRViolation(g, FindRegistrationSite(g),
l->g, FindRegistrationSite(l->g));
}
}
}

// Clang provides two different ways for global variables protection:
// it can poison the global itself or its private alias. In former
// case we may poison same symbol multiple times, that can help us to
Expand Down Expand Up @@ -211,8 +194,6 @@ static void RegisterGlobal(const Global *g) {
// where two globals with the same name are defined in different modules.
if (UseODRIndicator(g))
CheckODRViolationViaIndicator(g);
else
CheckODRViolationViaPoisoning(g);
}
if (CanPoisonMemory())
PoisonRedZones(*g);
Expand Down
2 changes: 1 addition & 1 deletion libsanitizer/sanitizer_common/sanitizer_mac.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
extern char **environ;
#endif

#if defined(__has_include) && __has_include(<os/trace.h>)
#if defined(__has_include) && __has_include(<os/trace.h>) && defined(__BLOCKS__)
#define SANITIZER_OS_TRACE 1
#include <os/trace.h>
#else
Expand Down
4 changes: 2 additions & 2 deletions libsanitizer/sanitizer_common/sanitizer_stacktrace.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ static inline uhwptr *GetCanonicFrame(uptr bp,
// Nope, this does not look right either. This means the frame after next does
// not have a valid frame pointer, but we can still extract the caller PC.
// Unfortunately, there is no way to decide between GCC and LLVM frame
// layouts. Assume LLVM.
return bp_prev;
// layouts. Assume GCC.
return bp_prev - 1;
#else
return (uhwptr*)bp;
#endif
Expand Down
15 changes: 15 additions & 0 deletions libsanitizer/ubsan/ubsan_handlers.cc
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,21 @@ void __ubsan_handle_cfi_bad_type(CFICheckFailData *Data, ValueHandle Vtable,

} // namespace __ubsan

void __ubsan::__ubsan_handle_cfi_bad_icall(CFIBadIcallData *CallData,
ValueHandle Function) {
GET_REPORT_OPTIONS(false);
CFICheckFailData Data = {CFITCK_ICall, CallData->Loc, CallData->Type};
handleCFIBadIcall(&Data, Function, Opts);
}

void __ubsan::__ubsan_handle_cfi_bad_icall_abort(CFIBadIcallData *CallData,
ValueHandle Function) {
GET_REPORT_OPTIONS(true);
CFICheckFailData Data = {CFITCK_ICall, CallData->Loc, CallData->Type};
handleCFIBadIcall(&Data, Function, Opts);
Die();
}

void __ubsan::__ubsan_handle_cfi_check_fail(CFICheckFailData *Data,
ValueHandle Value,
uptr ValidVtable) {
Expand Down
8 changes: 8 additions & 0 deletions libsanitizer/ubsan/ubsan_handlers.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,12 +202,20 @@ enum CFITypeCheckKind : unsigned char {
CFITCK_VMFCall,
};

struct CFIBadIcallData {
SourceLocation Loc;
const TypeDescriptor &Type;
};

struct CFICheckFailData {
CFITypeCheckKind CheckKind;
SourceLocation Loc;
const TypeDescriptor &Type;
};

/// \brief Handle control flow integrity failure for indirect function calls.
RECOVERABLE(cfi_bad_icall, CFIBadIcallData *Data, ValueHandle Function)

/// \brief Handle control flow integrity failures.
RECOVERABLE(cfi_check_fail, CFICheckFailData *Data, ValueHandle Function,
uptr VtableIsValid)
Expand Down

0 comments on commit 87ccb23

Please sign in to comment.