__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ 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_qos.h"
#include <linux/atomic.h>
#include <linux/mutex.h>
#include <linux/sched/sysctl.h>
#include "ertp_array.h"
#include "ertp_cache.h"
#include "ertp_logs.h"
#include "ertp_qos_queue.h"
#include "ertp_stats.h"
#define DEFAULT_SCANNER_QUEUE_SIZE 64
struct ertp_scanner_t {
atomic_t enabled;
atomic_t tgid;
};
struct ertp_scanner_queue_t {
struct mutex lock;
struct ertp_array events;
};
struct ertp_qos_t {
struct mutex lock;
struct ertp_qos_queue_t qos_queue;
struct ertp_scanner_queue_t scanner_queue;
struct ertp_scanner_t scanner;
atomic_t suspend_active;
atomic_t initialized;
struct wait_queue_head request_available;
unsigned int scanner_timeout;
unsigned int mem_dev_timeout;
unsigned int delay;
};
static struct ertp_qos_t qos;
static void deinit_item(void *data) {
struct ertp_event *event = (struct ertp_event *)(data);
ertp_event_unblock(event, 0);
ertp_event_unref(event);
}
int ertp_qos_init(void) {
int err = ertp_array_init(&qos.scanner_queue.events,
DEFAULT_SCANNER_QUEUE_SIZE, deinit_item);
if (err) {
return err;
}
mutex_init(&qos.scanner_queue.lock);
mutex_init(&qos.lock);
init_waitqueue_head(&qos.request_available);
ertp_qos_queue_init(&qos.qos_queue);
atomic_set(&qos.scanner.enabled, false);
atomic_set(&qos.scanner.tgid, -1);
atomic_set(&qos.suspend_active, false);
atomic_set(&qos.initialized, false);
qos.scanner_timeout = 0;
qos.mem_dev_timeout = 0;
qos.delay = 0;
return 0;
}
void ertp_qos_deinit(void) {
ertp_qos_queue_deinit(&qos.qos_queue);
ertp_array_deinit(&qos.scanner_queue.events);
mutex_destroy(&qos.scanner_queue.lock);
mutex_destroy(&qos.lock);
}
bool ertp_qos_enabled(void) {
return atomic_read(&qos.initialized) && atomic_read(&qos.scanner.enabled) &&
!atomic_read(&qos.suspend_active);
}
void ertp_qos_scanner_enable(void) {
mutex_lock(&qos.lock);
atomic_set(&qos.scanner.enabled, true);
mutex_unlock(&qos.lock);
}
static void flush_all_events(struct ertp_qos_queue_t *swap) {
ertp_qos_queue_swap_and_reinit(&qos.qos_queue, swap);
mutex_lock(&qos.scanner_queue.lock);
ertp_array_clear(&qos.scanner_queue.events);
mutex_unlock(&qos.scanner_queue.lock);
}
void ertp_qos_suspend_enable(void) {
struct ertp_qos_queue_t swap;
mutex_lock(&qos.lock);
atomic_set(&qos.suspend_active, true);
flush_all_events(&swap);
mutex_unlock(&qos.lock);
ertp_qos_queue_deinit(&swap);
}
void ertp_qos_scanner_disable(void) {
struct ertp_qos_queue_t swap;
mutex_lock(&qos.lock);
atomic_set(&qos.scanner.enabled, false);
flush_all_events(&swap);
mutex_unlock(&qos.lock);
ertp_qos_queue_deinit(&swap);
}
void ertp_qos_suspend_disable(void) {
mutex_lock(&qos.lock);
atomic_set(&qos.suspend_active, false);
mutex_unlock(&qos.lock);
}
struct ertp_event *ertp_qos_get_next_event(size_t max_size) {
struct ertp_event *event = NULL;
mutex_lock(&qos.lock);
event = ertp_qos_queue_get_next(&qos.qos_queue, max_size);
mutex_unlock(&qos.lock);
return event;
}
static bool cmp_events_ids(const void *data, const void *ctx) {
const struct ertp_event *event = (const struct ertp_event *)data;
return event->id == *(int32_t *)ctx;
}
static struct ertp_event *scanner_remove_event(int32_t id) {
struct ertp_event *event = NULL;
size_t position;
position = ertp_array_find(&qos.scanner_queue.events, &id, cmp_events_ids);
if (position != SIZE_MAX) {
event = ertp_array_at(&qos.scanner_queue.events, position);
ertp_array_remove(&qos.scanner_queue.events, position);
} else {
ertp_pr_edlog("context for event with id %d not found", id);
}
return event;
}
static void scanner_remove_event_context(int32_t id) {
struct ertp_event *event = NULL;
mutex_lock(&qos.scanner_queue.lock);
event = scanner_remove_event(id);
mutex_unlock(&qos.scanner_queue.lock);
if (event) {
ertp_event_unref(event);
}
}
static void drop_event_context(struct ertp_event *event) {
struct ertp_event *removed_event_context = NULL;
mutex_lock(&qos.scanner_queue.lock);
ertp_event_disable_context(event);
removed_event_context = scanner_remove_event(event->id);
if (removed_event_context) {
ertp_event_unref(removed_event_context);
}
mutex_unlock(&qos.scanner_queue.lock);
}
static void drop_event_and_unref(struct ertp_event *event,
enum ertp_qos_queue_ids qos_queue_id) {
mutex_lock(&qos.lock);
if (!ertp_qos_queue_remove(&qos.qos_queue, qos_queue_id, event)) {
drop_event_context(event);
}
mutex_unlock(&qos.lock);
}
static void delay_processing(struct ertp_event *event) {
long timeout_jiffies = msecs_to_jiffies(qos.delay);
wait_for_completion_timeout(&event->wait_scanner, timeout_jiffies);
}
static void wait_for_scanner_start_uninterruptible(struct ertp_event *event,
long timeout_jiffies) {
unsigned long ret;
do {
ret = wait_for_completion_timeout(&event->wait_qos, timeout_jiffies);
if (ret > 0) {
return;
}
ertp_pr_debug(
"event is waiting for too long to be sent to scanner (id: %d)",
event->id);
} while (unlikely(ret == 0));
}
static int wait_for_scanner_start(struct ertp_event *event,
enum ertp_qos_queue_ids qos_queue_id) {
long ret;
long timeout_jiffies = msecs_to_jiffies(10000);
do {
ret = wait_for_completion_interruptible_timeout(&event->wait_qos,
timeout_jiffies);
if (ret > 0) {
return 0;
}
if (ret == -ERESTARTSYS) {
switch (event->signal_handler) {
case ERTP_SIGNAL_HANDLER_RESTART_INTR:
drop_event_and_unref(event, qos_queue_id);
ertp_event_unblock(event, -ERESTARTSYS);
break;
case ERTP_SIGNAL_HANDLER_RESTART:
drop_event_and_unref(event, qos_queue_id);
ertp_event_unblock(event, -ERESTARTNOINTR);
break;
case ERTP_SIGNAL_HANDLER_WAIT:
drop_event_context(event);
delay_processing(event);
ertp_event_unblock(event, 0);
break;
case ERTP_SIGNAL_HANDLER_IGNORE:
wait_for_scanner_start_uninterruptible(event, timeout_jiffies);
return 0;
case ERTP_SIGNAL_HANDLER_UNINITIALIZED:
BUG();
}
return -EINTR;
}
ertp_pr_debug(
"event is waiting for too long to be sent to scanner (id: %d)",
event->id);
} while (unlikely(ret == 0));
return 0;
}
static bool wait_for_scanner_end(struct ertp_event *event) {
long timeout_jiffies = msecs_to_jiffies(qos.scanner_timeout);
long ret = wait_for_completion_interruptible_timeout(&event->wait_scanner,
timeout_jiffies);
if (ret > 0) {
return 0;
}
if (ret == -ERESTARTSYS) {
switch (event->signal_handler) {
case ERTP_SIGNAL_HANDLER_RESTART_INTR:
scanner_remove_event_context(event->id);
ertp_event_unblock(event, -ERESTARTSYS);
break;
case ERTP_SIGNAL_HANDLER_RESTART:
scanner_remove_event_context(event->id);
ertp_event_unblock(event, -ERESTARTNOINTR);
break;
case ERTP_SIGNAL_HANDLER_WAIT:
scanner_remove_event_context(event->id);
delay_processing(event);
ertp_event_unblock(event, 0);
break;
case ERTP_SIGNAL_HANDLER_IGNORE:
if (wait_for_completion_timeout(&event->wait_scanner,
timeout_jiffies) == 0) {
goto timeout;
}
return 0;
case ERTP_SIGNAL_HANDLER_UNINITIALIZED:
BUG();
}
return -EINTR;
}
timeout:
scanner_remove_event_context(event->id);
ertp_event_unblock(event, 0);
return -ETIMEDOUT;
}
static int ertp_qos_handle_new_event(struct ertp_event *event) {
bool ok = false;
enum ertp_qos_queue_ids qos_queue_id;
ertp_qos_event_data_fill(&event->qos_data);
mutex_lock(&qos.lock);
if (ertp_qos_enabled()) {
qos_queue_id = ertp_qos_queue_insert(&qos.qos_queue, event);
ok = true;
}
mutex_unlock(&qos.lock);
if (ok) {
int ret = 0;
wake_up_interruptible(&qos.request_available);
ret = wait_for_scanner_start(event, qos_queue_id);
if (ret != 0) {
return ret;
}
ret = wait_for_scanner_end(event);
if (ret != 0) {
return ret;
}
}
return 0;
}
int ertp_qos_handle_generic_event(
const struct ertp_event_generic_info *event_info) {
int rv;
int ret;
struct ertp_event *event_base = ertp_event_generic_new(event_info);
struct ertp_event_generic *event = ERTP_EVENT_GENERIC(event_base);
if (IS_ERR(event_base)) {
return PTR_ERR(event_base);
}
ret = ertp_qos_handle_new_event(event_base);
if (unlikely(ret == -ETIMEDOUT)) {
ertp_pr_debug(
"event is waiting for too long for response from scanner (type: "
"GENERIC %s, id: %d, file: %s, process: %s)",
ertp_event_type_to_str(event->type), event_base->id,
event_info->file_path->ptr, event_info->process_path->ptr);
} else if (unlikely(ret == -EINTR)) {
ertp_pr_edlog(
"event handling was interrupted by a signal (type: GENERIC %s, id: %d, "
"file: %s, process: %s)",
ertp_event_type_to_str(event->type), event_base->id,
event_info->file_path->ptr, event_info->process_path->ptr);
} else if (unlikely(ret != 0)) {
ertp_pr_edlog(
"event handling ended with non-zero return value: (errno: %d, type: "
"GENERIC %s, id: %d, file: %s, process: %s)",
ret, ertp_event_type_to_str(event->type), event_base->id,
event_info->file_path->ptr, event_info->process_path->ptr);
}
rv = ertp_event_get_result(event_base);
ertp_event_unref(event_base);
return rv;
}
int ertp_qos_handle_memory_event(
const struct ertp_event_memory_info *event_info) {
int rv;
int ret;
struct ertp_event *event_base =
ertp_event_memory_new(event_info, qos.mem_dev_timeout);
struct ertp_event_memory *event = ERTP_EVENT_MEMORY(event_base);
if (IS_ERR(event_base)) {
return PTR_ERR(event_base);
}
ret = ertp_qos_handle_new_event(event_base);
if (unlikely(ret == -ETIMEDOUT)) {
ertp_pr_debug(
"event is waiting for too long for response from scanner (type: MEMORY "
"%s, id: %d, process: %s, mem_dev file: %s)",
ertp_event_type_to_str(event->type), event_base->id,
event->process_path->ptr, event->dev_info->name);
} else if (unlikely(ret == -EINTR)) {
ertp_pr_edlog(
"event handling was interrupted by a signal (type: MEMORY %s, id: %d, "
"process: %s, mem_dev file: %s)",
ertp_event_type_to_str(event->type), event_base->id,
event->process_path->ptr, event->dev_info->name);
} else if (unlikely(ret != 0)) {
ertp_pr_edlog(
"event handling ended with non-zero return value: (errno: %d, type: "
"MEMORY %s, id: %d, process: %s, mem_dev file: %s)",
ret, ertp_event_type_to_str(event->type), event_base->id,
event->process_path->ptr, event->dev_info->name);
}
rv = ertp_event_get_result(event_base);
ertp_mem_dev_destroy(event);
ertp_event_unref(event_base);
return rv;
}
void ertp_qos_handle_remove_event(
const struct ertp_event_remove_info *event_info) {
struct ertp_event *event_base = ertp_event_remove_new(event_info);
struct ertp_event_remove *event = ERTP_EVENT_REMOVE(event_base);
int ret;
if (IS_ERR(event_base)) {
return;
}
ertp_cache_remove(event->ino, event->dev);
ret = ertp_qos_handle_new_event(event_base);
if (unlikely(ret == -ETIMEDOUT)) {
ertp_pr_debug(
"event is waiting for too long for response from scanner (type: "
"REMOVE, id: %d, file: %s, process: %s)",
event_base->id, event_info->file_path->ptr,
event_info->process_path->ptr);
} else if (unlikely(ret == -EINTR)) {
ertp_pr_edlog(
"event handling was interrupted by a signal (type: REMOVE, id: %d, "
"file: %s, process: %s)",
event_base->id, event_info->file_path->ptr,
event_info->process_path->ptr);
} else if (unlikely(ret != 0)) {
ertp_pr_edlog(
"event handling ended with non-zero return value: (errno: %d, type: "
"REMOVE, id: %d, file: %s, process: %s)",
ret, event_base->id, event_info->file_path->ptr,
event_info->process_path->ptr);
}
ertp_event_unref(event_base);
}
bool ertp_qos_scanner_init(unsigned int scanner_timeout,
unsigned int mem_dev_timeout, unsigned int delay) {
if (atomic_read(&qos.initialized)) {
return false;
}
qos.scanner_timeout = scanner_timeout;
qos.mem_dev_timeout = mem_dev_timeout;
qos.delay = delay;
atomic_set(&qos.initialized, true);
return true;
}
bool ertp_qos_scanner_check_thread(void) {
return (atomic_read(&qos.scanner.tgid) == current->tgid);
}
int ertp_qos_scanner_connect(pid_t tgid) {
int ret = -EEXIST;
mutex_lock(&qos.lock);
if (atomic_read(&qos.scanner.tgid) == -1) {
ertp_pr_edlog("registering new scanner with pid(tgid) %d",
atomic_read(&qos.scanner.tgid));
atomic_set(&qos.scanner.tgid, tgid);
ret = 0;
}
mutex_unlock(&qos.lock);
return ret;
}
void ertp_qos_scanner_disconnect(void) {
struct ertp_qos_queue_t swap;
mutex_lock(&qos.lock);
atomic_set(&qos.scanner.enabled, false);
if (atomic_read(&qos.scanner.tgid) != -1) {
ertp_pr_edlog("unregistering scanner with pid(tgid) %d",
atomic_read(&qos.scanner.tgid));
atomic_set(&qos.scanner.tgid, -1);
}
flush_all_events(&swap);
mutex_unlock(&qos.lock);
ertp_qos_queue_deinit(&swap);
}
int ertp_qos_scanner_save_sent_event(struct ertp_event *event) {
int ret = 0;
mutex_lock(&qos.scanner_queue.lock);
if (event->save_context) {
ret = ertp_array_insert(&qos.scanner_queue.events, event);
if (ret == 0) {
ertp_event_ref(event);
ertp_stats_report_scan_started(
&event->stats, ertp_array_size(&qos.scanner_queue.events));
}
}
mutex_unlock(&qos.scanner_queue.lock);
return ret;
}
static struct ertp_event *scanner_get_finished_event(int32_t id) {
struct ertp_event *event = NULL;
mutex_lock(&qos.scanner_queue.lock);
event = scanner_remove_event(id);
mutex_unlock(&qos.scanner_queue.lock);
wake_up_interruptible(&qos.request_available);
if (event) {
ertp_stats_report_scan_finished(&event->stats, event->class);
}
return event;
}
static inline enum ertp_event_type convert_event_type(
enum eset_rtp_cache_data_type type) {
switch (type) {
case ERTP_TYPE_CACHE_OPEN:
return ERTP_EVENT_TYPE_OPEN;
case ERTP_TYPE_CACHE_CLOSE:
return ERTP_EVENT_TYPE_CLOSE;
case ERTP_TYPE_CACHE_EXEC:
return ERTP_EVENT_TYPE_EXEC;
}
BUG();
}
void ertp_qos_scanner_process_scan_response(
const struct eset_rtp_set_av_status *response) {
struct ertp_event *event = scanner_get_finished_event(response->id);
if (event) {
int result;
switch (response->result) {
case ERTP_RESULT_ALLOW:
result = 0;
break;
case ERTP_RESULT_DENY:
result = -EPERM;
break;
default:
BUG();
}
ertp_event_finished(event, result);
ertp_event_unref(event);
}
if (response->result == ERTP_RESULT_ALLOW &&
(response->flags & ERTP_AV_RESULT_FLAG_SHOULD_CACHE)) {
ertp_timespec_t ctime;
ctime.tv_sec = response->cache_data.ctime.tv_sec;
ctime.tv_nsec = response->cache_data.ctime.tv_nsec;
ertp_cache_add(response->cache_data.ino, response->cache_data.dev,
convert_event_type(response->cache_data.type), ctime);
}
}
void ertp_qos_scanner_process_event_response(
const struct eset_rtp_remove_event_finished *response) {
struct ertp_event *event = scanner_get_finished_event(response->id);
if (event) {
ertp_event_finished(event, 0);
ertp_event_unref(event);
}
}
static bool event_ready_for_scanner(void) {
bool ready;
mutex_lock(&qos.lock);
ready = ertp_qos_queue_event_ready(&qos.qos_queue);
mutex_unlock(&qos.lock);
return ready;
}
unsigned int ertp_qos_scanner_wait(struct file *file, poll_table *wait) {
unsigned int mask;
poll_wait(file, &qos.request_available, wait);
mask = POLLOUT | POLLWRNORM;
if (event_ready_for_scanner()) {
mask |= POLLIN | POLLRDNORM;
}
return mask;
}
| 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 |
|