mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 06:16:30 +03:00
33 lines
1.3 KiB
C++
33 lines
1.3 KiB
C++
// Copyright 2021 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef BASE_STACK_CANARY_LINUX_H_
|
|
#define BASE_STACK_CANARY_LINUX_H_
|
|
|
|
#include "base/base_export.h"
|
|
|
|
namespace base {
|
|
|
|
// This resets the reference stack canary to a new random value, which is
|
|
// useful when forking so multiple processes don't have the same canary (which
|
|
// makes it easy to brute force). All functions called from here on out will
|
|
// use the new stack canary. However, functions that are on the call stack at
|
|
// the time of calling this function are now unsafe to return from unless they
|
|
// have the no_stack_protector attribute.
|
|
//
|
|
// On ARM we require the process to be single-threaded, as this function needs
|
|
// to edit a read-only page containing the canary.
|
|
void BASE_EXPORT ResetStackCanaryIfPossible();
|
|
|
|
// After this is called, any canary mismatch is considered to be due to a
|
|
// change in the reference canary (see ResetStackCanaryIfPossible()) rather
|
|
// than a stack corruption. Instead of immediately crashing, emit a useful
|
|
// debug message that explains how to avoid the crash.
|
|
// Has no effect is non-debug builds.
|
|
void BASE_EXPORT SetStackSmashingEmitsDebugMessage();
|
|
|
|
} // namespace base
|
|
|
|
#endif // BASE_STACK_CANARY_LINUX_H_
|