Add a command-line option (-M or --no_mcheck) to disable mcheck heap protection at runtime. When mcheck is disabled, the wrapper functions pass through directly to the underlying allocator without adding headers or checking for corruption. This is useful for debugging when mcheck interferes with test results, such as when memory-leak detection reports false positives due to accumulated allocations from other tests. Changes: - Add disable_mcheck flag to sandbox_state - Add mcheck_set_disabled() function to mcheck API - Modify dlmalloc wrappers to bypass mcheck when disabled - Add stub for when MCHECK_HEAP_PROTECTION is not enabled - Document the new option in sandbox.rst Co-developed-by: Claude <noreply@anthropic.com> Signed-off-by: Simon Glass <simon.glass@canonical.com>
66 lines
2.2 KiB
C
66 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.1+ */
|
|
/*
|
|
* Copyright (C) 1996-2024 Free Software Foundation, Inc.
|
|
* This file is part of the GNU C Library.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
* <https://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef _MCHECK_H
|
|
#define _MCHECK_H 1
|
|
|
|
/*
|
|
* Return values for `mprobe': these are the kinds of inconsistencies that
|
|
* `mcheck' enables detection of.
|
|
*/
|
|
enum mcheck_status {
|
|
MCHECK_DISABLED = -1, /* Consistency checking is not turned on. */
|
|
MCHECK_OK, /* Block is fine. */
|
|
MCHECK_FREE, /* Block freed twice. */
|
|
MCHECK_HEAD, /* Memory before the block was clobbered. */
|
|
MCHECK_TAIL /* Memory after the block was clobbered. */
|
|
};
|
|
|
|
typedef void (*mcheck_abortfunc_t)(enum mcheck_status, const void *p);
|
|
|
|
int mcheck(mcheck_abortfunc_t func);
|
|
|
|
/*
|
|
* Similar to `mcheck' but performs checks for all block whenever one of
|
|
* the memory handling functions is called. This can be very slow.
|
|
*/
|
|
int mcheck_pedantic(mcheck_abortfunc_t f);
|
|
|
|
/* Force check of all blocks now. */
|
|
void mcheck_check_all(void);
|
|
|
|
/*
|
|
* Check for aberrations in a particular malloc'd block. These are the
|
|
* same checks that `mcheck' does, when you free or reallocate a block.
|
|
*/
|
|
enum mcheck_status mprobe(void *__ptr);
|
|
|
|
/* Called during RAM relocation to reset the heap registry */
|
|
void mcheck_on_ramrelocation(size_t offset);
|
|
|
|
/**
|
|
* mcheck_set_disabled() - Disable mcheck at runtime
|
|
*
|
|
* When disabled, mcheck wrapper functions pass through directly to the
|
|
* underlying allocator without adding headers or checking for corruption.
|
|
* This is useful for debugging when mcheck interferes with test results.
|
|
*
|
|
* @disabled: true to disable mcheck, false to enable
|
|
*/
|
|
void mcheck_set_disabled(bool disabled);
|
|
|
|
#endif
|