__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/*
 * 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);
}

Filemanager

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
Filemanager