__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
/*
* eset_rtp (ESET Real-time file system protection module)
* Copyright (C) 1992-2025 ESET, spol. s r.o.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* In case of any questions, you can contact us at ESET, spol. s r.o., Einsteinova 24, 851 01 Bratislava, Slovakia.
*/
#include "ertp_stats.h"
#include <linux/kernel.h>
#include <linux/ktime.h>
#include <linux/overflow.h>
#include <linux/spinlock.h>
#include "ertp_qos_queue.h"
#define TIME_CONVERSION_FACTOR 1000
static u64 last_reset_timestamp = 0;
struct event_processing_stats {
u64 event_counter;
u64 qos_duration;
u64 scan_duration;
u64 total_duration;
u64 qos_duration_max;
u64 scan_duration_max;
u64 total_duration_max;
};
static struct event_processing_stats generic_stats = {0, 0, 0, 0, 0, 0, 0};
static struct event_processing_stats remove_stats = {0, 0, 0, 0, 0, 0, 0};
static DEFINE_SPINLOCK(event_stats_lock);
static size_t scanner_max = 0;
static DEFINE_SPINLOCK(scanner_max_lock);
static size_t qos_size_stats[N_ERTP_QOS_QUEUE_IDS] = {0, 0, 0};
static DEFINE_SPINLOCK(qos_size_stats_lock);
void ertp_event_stats_init(struct ertp_event_stats* stats) {
stats->event_creation_time = ktime_get_ns();
stats->scan_start_time = 0;
stats->scan_end_time = 0;
}
void ertp_stats_init(void) {
spin_lock(&event_stats_lock);
last_reset_timestamp = ktime_get_ns();
spin_unlock(&event_stats_lock);
}
static struct event_processing_stats process_stats_unlocked(
struct event_processing_stats* stats) {
struct event_processing_stats out = {0, 0, 0, 0, 0, 0, 0};
if (stats) {
if (stats->event_counter) {
out.event_counter = stats->event_counter;
out.total_duration =
div64_u64(stats->total_duration, stats->event_counter);
out.scan_duration = div64_u64(stats->scan_duration, stats->event_counter);
out.qos_duration = div64_u64(stats->qos_duration, stats->event_counter);
out.total_duration_max = stats->total_duration_max;
out.scan_duration_max = stats->scan_duration_max;
out.qos_duration_max = stats->qos_duration_max;
}
}
return out;
}
static void reset_event_processing_stats_unlocked(
struct event_processing_stats* stats) {
*stats = (struct event_processing_stats){0, 0, 0, 0, 0, 0, 0};
}
ssize_t ertp_stats_print(char* buf, size_t size) {
static const char STATS_FMT[] =
"SecondsSinceStatsReset: %llu s\n"
"GenericEventsScanned: %llu\n"
"RemoveEventsScanned: %llu\n"
"MaxConcurrentEventsScanned: %lu\n"
"MaxRTQueueSize: %lu\n"
"MaxBEQueueSize: %lu\n"
"MaxIDLEQueueSize: %lu\n"
"AvgGenericQueueDuration: %llu us\n"
"AvgRemoveQueueDuration: %llu us\n"
"MaxGenericQueueDuration: %llu us\n"
"MaxRemoveQueueDuration: %llu us\n"
"AvgGenericScanDuration: %llu us\n"
"AvgRemoveScanDuration: %llu us\n"
"MaxGenericScanDuration: %llu us\n"
"MaxRemoveScanDuration: %llu us\n"
"AvgGenericTotalDuration: %llu us\n"
"AvgRemoveTotalDuration: %llu us\n"
"MaxGenericTotalDuration: %llu us\n"
"MaxRemoveTotalDuration: %llu us\n";
struct event_processing_stats avg_generic_stats;
struct event_processing_stats avg_remove_stats;
size_t tmp_max_scanner_array_size = 0;
size_t tmp_qos_size_stats[3];
u64 seconds_since_last_stats_reset = 0;
spin_lock(&event_stats_lock);
seconds_since_last_stats_reset =
div64_u64(ktime_get_ns() - last_reset_timestamp, 1000000000);
avg_generic_stats = process_stats_unlocked(&generic_stats);
avg_remove_stats = process_stats_unlocked(&remove_stats);
spin_lock(&scanner_max_lock);
tmp_max_scanner_array_size = scanner_max;
spin_unlock(&scanner_max_lock);
spin_lock(&qos_size_stats_lock);
tmp_qos_size_stats[ERTP_QOS_QUEUE_RT] = qos_size_stats[ERTP_QOS_QUEUE_RT];
tmp_qos_size_stats[ERTP_QOS_QUEUE_BE] = qos_size_stats[ERTP_QOS_QUEUE_BE];
tmp_qos_size_stats[ERTP_QOS_QUEUE_IDLE] = qos_size_stats[ERTP_QOS_QUEUE_IDLE];
spin_unlock(&qos_size_stats_lock);
spin_unlock(&event_stats_lock);
return snprintf(
buf, size, STATS_FMT, seconds_since_last_stats_reset,
avg_generic_stats.event_counter, avg_remove_stats.event_counter,
tmp_max_scanner_array_size, tmp_qos_size_stats[ERTP_QOS_QUEUE_RT],
tmp_qos_size_stats[ERTP_QOS_QUEUE_BE],
tmp_qos_size_stats[ERTP_QOS_QUEUE_IDLE],
div64_u64(avg_generic_stats.qos_duration, TIME_CONVERSION_FACTOR),
div64_u64(avg_remove_stats.qos_duration, TIME_CONVERSION_FACTOR),
div64_u64(avg_generic_stats.qos_duration_max, TIME_CONVERSION_FACTOR),
div64_u64(avg_remove_stats.qos_duration_max, TIME_CONVERSION_FACTOR),
div64_u64(avg_generic_stats.scan_duration, TIME_CONVERSION_FACTOR),
div64_u64(avg_remove_stats.scan_duration, TIME_CONVERSION_FACTOR),
div64_u64(avg_generic_stats.scan_duration_max, TIME_CONVERSION_FACTOR),
div64_u64(avg_remove_stats.scan_duration_max, TIME_CONVERSION_FACTOR),
div64_u64(avg_generic_stats.total_duration, TIME_CONVERSION_FACTOR),
div64_u64(avg_remove_stats.total_duration, TIME_CONVERSION_FACTOR),
div64_u64(avg_generic_stats.total_duration_max, TIME_CONVERSION_FACTOR),
div64_u64(avg_remove_stats.total_duration_max, TIME_CONVERSION_FACTOR));
}
void ertp_stats_reset(void) {
spin_lock(&event_stats_lock);
last_reset_timestamp = ktime_get_ns();
reset_event_processing_stats_unlocked(&generic_stats);
reset_event_processing_stats_unlocked(&remove_stats);
spin_lock(&scanner_max_lock);
scanner_max = 0;
spin_unlock(&scanner_max_lock);
spin_lock(&qos_size_stats_lock);
qos_size_stats[ERTP_QOS_QUEUE_RT] = 0;
qos_size_stats[ERTP_QOS_QUEUE_BE] = 0;
qos_size_stats[ERTP_QOS_QUEUE_IDLE] = 0;
spin_unlock(&qos_size_stats_lock);
spin_unlock(&event_stats_lock);
}
static void update_event_stats(struct event_processing_stats* stats,
struct ertp_event_stats* event_stats) {
u64 qos_duration =
event_stats->scan_start_time - event_stats->event_creation_time;
u64 scan_duration = event_stats->scan_end_time - event_stats->scan_start_time;
u64 total_duration =
event_stats->scan_end_time - event_stats->event_creation_time;
spin_lock(&event_stats_lock);
if (check_add_overflow(stats->event_counter, (u64)1, &stats->event_counter)) {
goto overflow;
}
if (check_add_overflow(stats->qos_duration, scan_duration,
&stats->qos_duration)) {
goto overflow;
}
if (check_add_overflow(stats->scan_duration, scan_duration,
&stats->scan_duration)) {
goto overflow;
}
if (check_add_overflow(stats->total_duration, total_duration,
&stats->total_duration)) {
goto overflow;
}
if (qos_duration > stats->qos_duration_max) {
stats->qos_duration_max = qos_duration;
}
if (scan_duration > stats->scan_duration_max) {
stats->scan_duration_max = scan_duration;
}
if (total_duration > stats->total_duration_max) {
stats->total_duration_max = total_duration;
}
spin_unlock(&event_stats_lock);
return;
overflow:
spin_unlock(&event_stats_lock);
ertp_stats_reset();
}
void ertp_stats_report_scan_started(struct ertp_event_stats* event_stats,
size_t scanner_array_size) {
event_stats->scan_start_time = ktime_get_ns();
spin_lock(&scanner_max_lock);
if (scanner_array_size > scanner_max) {
scanner_max = scanner_array_size;
}
spin_unlock(&scanner_max_lock);
}
void ertp_stats_report_scan_finished(struct ertp_event_stats* event_stats,
uint32_t event_class) {
event_stats->scan_end_time = ktime_get_ns();
if (event_class == ERTP_EVENT_CLASS_GENERIC) {
update_event_stats(&generic_stats, event_stats);
}
if (event_class == ERTP_EVENT_CLASS_REMOVE) {
update_event_stats(&remove_stats, event_stats);
}
}
void ertp_stats_report_qos_heap_size(size_t size, size_t type) {
spin_lock(&qos_size_stats_lock);
if (size > qos_size_stats[type]) {
qos_size_stats[type] = size;
}
spin_unlock(&qos_size_stats_lock);
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| .ertp_array.o.cmd | File | 67.01 KB | 0644 |
|
| .ertp_cache.o.cmd | File | 62.05 KB | 0644 |
|
| .ertp_cache_container.o.cmd | File | 51.03 KB | 0644 |
|
| .ertp_debug.o.cmd | File | 61.29 KB | 0644 |
|
| .ertp_dev.o.cmd | File | 70.46 KB | 0644 |
|
| .ertp_event.o.cmd | File | 62.23 KB | 0644 |
|
| .ertp_event_check.o.cmd | File | 62.68 KB | 0644 |
|
| .ertp_excludes.o.cmd | File | 50.98 KB | 0644 |
|
| .ertp_ftrace_hook.o.cmd | File | 88.2 KB | 0644 |
|
| .ertp_ftrace_utils.o.cmd | File | 75.37 KB | 0644 |
|
| .ertp_handlers.o.cmd | File | 88.06 KB | 0644 |
|
| .ertp_handlers_close.o.cmd | File | 88.18 KB | 0644 |
|
| .ertp_handlers_execve.o.cmd | File | 88.54 KB | 0644 |
|
| .ertp_handlers_exit.o.cmd | File | 88.51 KB | 0644 |
|
| .ertp_handlers_mmap.o.cmd | File | 88.69 KB | 0644 |
|
| .ertp_handlers_module.o.cmd | File | 88.39 KB | 0644 |
|
| .ertp_handlers_open.o.cmd | File | 88.58 KB | 0644 |
|
| .ertp_handlers_rename.o.cmd | File | 88.54 KB | 0644 |
|
| .ertp_handlers_unlink.o.cmd | File | 88.54 KB | 0644 |
|
| .ertp_heap.o.cmd | File | 67 KB | 0644 |
|
| .ertp_logs.o.cmd | File | 15.1 KB | 0644 |
|
| .ertp_memory_dev.o.cmd | File | 70.16 KB | 0644 |
|
| .ertp_mod.o.cmd | File | 88.99 KB | 0644 |
|
| .ertp_path.o.cmd | File | 65.63 KB | 0644 |
|
| .ertp_qos.o.cmd | File | 67.84 KB | 0644 |
|
| .ertp_qos_event_data.o.cmd | File | 61.74 KB | 0644 |
|
| .ertp_qos_queue.o.cmd | File | 61.73 KB | 0644 |
|
| .ertp_stats.o.cmd | File | 61.66 KB | 0644 |
|
| .ertp_sysfs.o.cmd | File | 68.08 KB | 0644 |
|
| .eset_rtp.ko.cmd | File | 256 B | 0644 |
|
| .eset_rtp.mod.cmd | File | 612 B | 0644 |
|
| .eset_rtp.mod.o.cmd | File | 67.08 KB | 0644 |
|
| .eset_rtp.o.cmd | File | 139 B | 0644 |
|
| .modules.order.cmd | File | 95 B | 0644 |
|
| Makefile | File | 1.44 KB | 0644 |
|
| ertp.h | File | 2.24 KB | 0644 |
|
| ertp_array.c | File | 4.44 KB | 0644 |
|
| ertp_array.h | File | 2.02 KB | 0644 |
|
| ertp_array.o | File | 37.93 KB | 0644 |
|
| ertp_cache.c | File | 6.42 KB | 0644 |
|
| ertp_cache.h | File | 1.51 KB | 0644 |
|
| ertp_cache.o | File | 152.7 KB | 0644 |
|
| ertp_cache_container.c | File | 4.91 KB | 0644 |
|
| ertp_cache_container.h | File | 1.84 KB | 0644 |
|
| ertp_cache_container.o | File | 38.19 KB | 0644 |
|
| ertp_debug.c | File | 1.32 KB | 0644 |
|
| ertp_debug.h | File | 1.25 KB | 0644 |
|
| ertp_debug.o | File | 14.66 KB | 0644 |
|
| ertp_dev.c | File | 13.64 KB | 0644 |
|
| ertp_dev.o | File | 245.34 KB | 0644 |
|
| ertp_event.c | File | 20.85 KB | 0644 |
|
| ertp_event.h | File | 4.98 KB | 0644 |
|
| ertp_event.o | File | 258.2 KB | 0644 |
|
| ertp_event_check.c | File | 8.15 KB | 0644 |
|
| ertp_event_check.h | File | 1.92 KB | 0644 |
|
| ertp_event_check.o | File | 157.53 KB | 0644 |
|
| ertp_excludes.c | File | 6.42 KB | 0644 |
|
| ertp_excludes.h | File | 1.48 KB | 0644 |
|
| ertp_excludes.o | File | 56.93 KB | 0644 |
|
| ertp_ftrace_hook.c | File | 4.54 KB | 0644 |
|
| ertp_ftrace_hook.h | File | 1.37 KB | 0644 |
|
| ertp_ftrace_hook.o | File | 50.73 KB | 0644 |
|
| ertp_ftrace_utils.c | File | 1.7 KB | 0644 |
|
| ertp_ftrace_utils.h | File | 1.63 KB | 0644 |
|
| ertp_ftrace_utils.o | File | 17.97 KB | 0644 |
|
| ertp_handlers.c | File | 7.86 KB | 0644 |
|
| ertp_handlers.h | File | 1.21 KB | 0644 |
|
| ertp_handlers.o | File | 44.59 KB | 0644 |
|
| ertp_handlers_close.c | File | 3.08 KB | 0644 |
|
| ertp_handlers_close.h | File | 1.72 KB | 0644 |
|
| ertp_handlers_close.o | File | 292.04 KB | 0644 |
|
| ertp_handlers_execve.c | File | 4.37 KB | 0644 |
|
| ertp_handlers_execve.h | File | 1.75 KB | 0644 |
|
| ertp_handlers_execve.o | File | 299.2 KB | 0644 |
|
| ertp_handlers_exit.c | File | 1.97 KB | 0644 |
|
| ertp_handlers_exit.h | File | 1.49 KB | 0644 |
|
| ertp_handlers_exit.o | File | 284.45 KB | 0644 |
|
| ertp_handlers_mmap.c | File | 1.92 KB | 0644 |
|
| ertp_handlers_mmap.h | File | 1.11 KB | 0644 |
|
| ertp_handlers_mmap.o | File | 280.8 KB | 0644 |
|
| ertp_handlers_module.c | File | 4.2 KB | 0644 |
|
| ertp_handlers_module.h | File | 1.53 KB | 0644 |
|
| ertp_handlers_module.o | File | 295.03 KB | 0644 |
|
| ertp_handlers_open.c | File | 3.77 KB | 0644 |
|
| ertp_handlers_open.h | File | 1.72 KB | 0644 |
|
| ertp_handlers_open.o | File | 291.44 KB | 0644 |
|
| ertp_handlers_rename.c | File | 5.14 KB | 0644 |
|
| ertp_handlers_rename.h | File | 1.75 KB | 0644 |
|
| ertp_handlers_rename.o | File | 292.21 KB | 0644 |
|
| ertp_handlers_unlink.c | File | 3.47 KB | 0644 |
|
| ertp_handlers_unlink.h | File | 1.49 KB | 0644 |
|
| ertp_handlers_unlink.o | File | 287.87 KB | 0644 |
|
| ertp_heap.c | File | 9.87 KB | 0644 |
|
| ertp_heap.h | File | 2.04 KB | 0644 |
|
| ertp_heap.o | File | 30 KB | 0644 |
|
| ertp_logs.c | File | 1.14 KB | 0644 |
|
| ertp_logs.h | File | 2.59 KB | 0644 |
|
| ertp_logs.o | File | 10.13 KB | 0644 |
|
| ertp_memory_dev.c | File | 8.34 KB | 0644 |
|
| ertp_memory_dev.h | File | 1.33 KB | 0644 |
|
| ertp_memory_dev.o | File | 224.05 KB | 0644 |
|
| ertp_mod.c | File | 3.18 KB | 0644 |
|
| ertp_mod.o | File | 28.85 KB | 0644 |
|
| ertp_path.c | File | 4.38 KB | 0644 |
|
| ertp_path.h | File | 1.31 KB | 0644 |
|
| ertp_path.o | File | 185.7 KB | 0644 |
|
| ertp_qos.c | File | 17.06 KB | 0644 |
|
| ertp_qos.h | File | 2.18 KB | 0644 |
|
| ertp_qos.o | File | 254.39 KB | 0644 |
|
| ertp_qos_event_data.c | File | 2.41 KB | 0644 |
|
| ertp_qos_event_data.h | File | 1.61 KB | 0644 |
|
| ertp_qos_event_data.o | File | 129.95 KB | 0644 |
|
| ertp_qos_queue.c | File | 4.32 KB | 0644 |
|
| ertp_qos_queue.h | File | 1.98 KB | 0644 |
|
| ertp_qos_queue.o | File | 34.61 KB | 0644 |
|
| ertp_stats.c | File | 8.53 KB | 0644 |
|
| ertp_stats.h | File | 1.53 KB | 0644 |
|
| ertp_stats.o | File | 46.95 KB | 0644 |
|
| ertp_sysfs.c | File | 5.51 KB | 0644 |
|
| ertp_sysfs.o | File | 185.59 KB | 0644 |
|
| ertp_types.h | File | 1.15 KB | 0644 |
|
| eset_rtp.h | File | 4.2 KB | 0644 |
|
| eset_rtp.ko | File | 4.46 MB | 0644 |
|
| eset_rtp.mod | File | 755 B | 0644 |
|
| eset_rtp.mod.c | File | 8.4 KB | 0644 |
|
| eset_rtp.mod.o | File | 159.15 KB | 0644 |
|
| eset_rtp.o | File | 4.29 MB | 0644 |
|
| eset_rtp_sysfs.h | File | 1.26 KB | 0644 |
|
| modules.order | File | 20 B | 0644 |
|