Merge pull request #862 from mmichal10/sanitizers

Enable compiling pyocf with sanitizers
This commit is contained in:
Robert Baldyga 2025-03-17 08:16:06 +01:00 committed by GitHub
commit bddc18f891
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 10 deletions

10
env/posix/ocf_env.h vendored
View File

@ -1,6 +1,6 @@
/*
* Copyright(c) 2019-2022 Intel Corporation
* Copyright(c) 2023-2024 Huawei Technologies
* Copyright(c) 2023-2025 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -378,12 +378,12 @@ typedef struct {
static inline int env_atomic_read(const env_atomic *a)
{
return a->counter; /* TODO */
return __atomic_load_n(&a->counter, __ATOMIC_SEQ_CST);
}
static inline void env_atomic_set(env_atomic *a, int i)
{
a->counter = i; /* TODO */
__atomic_store_n(&a->counter, i, __ATOMIC_SEQ_CST);
}
static inline void env_atomic_add(int i, env_atomic *a)
@ -453,12 +453,12 @@ static inline int env_atomic_add_unless(env_atomic *a, int i, int u)
static inline long env_atomic64_read(const env_atomic64 *a)
{
return a->counter; /* TODO */
return __atomic_load_n(&a->counter, __ATOMIC_SEQ_CST);
}
static inline void env_atomic64_set(env_atomic64 *a, long i)
{
a->counter = i; /* TODO */
__atomic_store_n(&a->counter, i, __ATOMIC_SEQ_CST);
}
static inline void env_atomic64_add(long i, env_atomic64 *a)

View File

@ -1,6 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* Copyright(c) 2024-2025 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -366,10 +366,10 @@ static void raw_dynamic_load_all_complete(
{
context->cmpl(context->priv, error);
ocf_req_put(context->req);
env_secure_free(context->page, PAGE_SIZE);
env_free(context->zpage);
ctx_data_free(context->cache->owner, context->req->data);
ocf_req_put(context->req);
env_vfree(context);
}

View File

@ -1,5 +1,6 @@
#
# Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2025 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#
@ -11,9 +12,8 @@ INCDIR=$(ADAPTERDIR)/ocf/include
WRAPDIR=$(ADAPTERDIR)/c/wrappers
HELPDIR=$(ADAPTERDIR)/c/helpers
CC=gcc
CFLAGS=-g -Wall -I$(INCDIR) -I$(SRCDIR)/ocf/env
LDFLAGS=-pthread -lz
CFLAGS=-g -Wall -I$(INCDIR) -I$(SRCDIR)/ocf/env $(OPT_CFLAGS)
LDFLAGS=-pthread #-lz
SRC=$(shell find $(SRCDIR) $(WRAPDIR) $(HELPDIR) -name \*.c)
OBJS=$(patsubst %.c, %.o, $(SRC))
@ -48,6 +48,7 @@ distclean: clean
@rm -rf $(OCFLIB) $(OBJS)
@rm -rf $(SRCDIR)/ocf
@rm -rf $(INCDIR)/ocf
@find . -name *.gc* -delete
@echo " DISTCLEAN "
.PHONY: all clean sync config_random distclean

View File

@ -0,0 +1,37 @@
#
# Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2025 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause
#
#!/usr/bin/env bash
LIB_DIR="/lib/x86_64-linux-gnu/"
ASAN_LIB="$LIB_DIR/libasan.so.6"
TSAN_LIB="$LIB_DIR/libtsan.so.0"
UBSAN_LIB="$LIB_DIR/libubsan.so.1"
# Path to test file/directory
PYOCF_TESTS_PATH="tests/"
echo "Cleaning and building with Address Sanitizer"
make distclean
OPT_CFLAGS="-fsanitize=address" make -j >/dev/null
echo "Running tests, please wait..."
LD_PRELOAD=$ASAN_LIB ASAN_OPTIONS=log_output=asan_log.txt PYTHONMALLOC=malloc pytest $PYOCF_TESTS_PATH 2>&1 | tee asan_output.txt
echo "Done, check asan_log.txt"
echo "Cleaning and building with Thread Sanitizer"
make distclean
OPT_CFLAGS="-fsanitize=thread -fno-omit-frame-pointer" make -j >/dev/null
echo "Running tests, please wait..."
LD_PRELOAD=$TSAN_LIB TSAN_OPTIONS=log_output=tsan_log.txt pytest -s $PYOCF_TESTS_PATH 2>&1 | tee tsan_output.txt
echo "Done, check tsan_log.txt"
echo "Cleaning and building with Undefined Behaviour Sanitizer"
make distclean
OPT_CFLAGS="-fsanitize=undefined -fno-sanitize=alignment" make -j >/dev/null
echo "Running tests, please wait..."
LD_PRELOAD=$UBSAN_LIB UBSAN_OPTIONS=log_output=ubsan_log.txt pytest -s $PYOCF_TESTS_PATH 2>&1 | tee ubsan_output.txt
echo "Done, check ubsan_output.txt"