Linux host2.homegym.sg 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64
Apache
Server IP : 159.223.38.192 & Your IP : 159.223.38.192
Domains : 20 Domain
User : eachadea
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Lock Shell
Lock File++
Readme
/
usr /
src /
file_protector-1.1-1583 /
Delete
Unzip
Name
Size
Permission
Date
Action
common
[ DIR ]
drwxr-xr-x
2025-10-28 18:03
ftrace_hooks
[ DIR ]
drwxr-xr-x
2025-10-28 18:03
lsm_hooks
[ DIR ]
drwxr-xr-x
2025-10-28 18:03
syscall_hooks
[ DIR ]
drwxr-xr-x
2025-10-28 18:03
transport
[ DIR ]
drwxr-xr-x
2025-10-28 18:03
Kbuild
10.29
KB
-rw-r--r--
2025-10-28 18:03
Makefile
2.23
KB
-rw-r--r--
2025-10-28 18:03
compat.c
8.42
KB
-rw-r--r--
2025-10-28 18:03
compat.h
11.98
KB
-rw-r--r--
2025-10-28 18:03
debug.h
3.56
KB
-rw-r--r--
2025-10-28 18:03
dkms.conf
146
B
-rw-r--r--
2025-10-28 18:03
file_contexts.c
60.43
KB
-rw-r--r--
2025-10-28 18:03
file_contexts.h
6.21
KB
-rw-r--r--
2025-10-28 18:03
file_contexts_priv.h
5.48
KB
-rw-r--r--
2025-10-28 18:03
file_handle_tools.h
2.53
KB
-rw-r--r--
2025-10-28 18:03
file_key_tools.h
950
B
-rw-r--r--
2025-10-28 18:03
file_path_tools.h
2.09
KB
-rw-r--r--
2025-10-28 18:03
hashtable_compat.h
2.73
KB
-rw-r--r--
2025-10-28 18:03
hook_trampoline_common.h
4.29
KB
-rw-r--r--
2025-10-28 18:03
interval_tree.h
779
B
-rw-r--r--
2025-10-28 18:03
memory.c
3.31
KB
-rw-r--r--
2025-10-28 18:03
memory.h
2.99
KB
-rw-r--r--
2025-10-28 18:03
module.c
2.67
KB
-rw-r--r--
2025-10-28 18:03
module_ref.h
421
B
-rw-r--r--
2025-10-28 18:03
module_rundown_protection.c
3.64
KB
-rw-r--r--
2025-10-28 18:03
module_rundown_protection.h
743
B
-rw-r--r--
2025-10-28 18:03
path_tools.h
6.06
KB
-rw-r--r--
2025-10-28 18:03
rundown_protection.c
4.2
KB
-rw-r--r--
2025-10-28 18:03
rundown_protection.h
2.83
KB
-rw-r--r--
2025-10-28 18:03
safe_kobject.h
1.28
KB
-rw-r--r--
2025-10-28 18:03
si_common.h
4.3
KB
-rw-r--r--
2025-10-28 18:03
si_fp_properties.h
858
B
-rw-r--r--
2025-10-28 18:03
si_fp_properties_x.h
18.53
KB
-rw-r--r--
2025-10-28 18:03
si_fp_value_types.h
515
B
-rw-r--r--
2025-10-28 18:03
si_fp_value_types_x.h
1.25
KB
-rw-r--r--
2025-10-28 18:03
si_size.h
4.26
KB
-rw-r--r--
2025-10-28 18:03
si_templates.h
2.99
KB
-rw-r--r--
2025-10-28 18:03
si_writer.h
7.52
KB
-rw-r--r--
2025-10-28 18:03
si_writer_common.h
14.63
KB
-rw-r--r--
2025-10-28 18:03
stringify.h
261
B
-rw-r--r--
2025-10-28 18:03
task_info_map.c
17.1
KB
-rw-r--r--
2025-10-28 18:03
task_info_map.h
6.33
KB
-rw-r--r--
2025-10-28 18:03
task_tools.h
1.34
KB
-rw-r--r--
2025-10-28 18:03
tracepoints.c
3.58
KB
-rw-r--r--
2025-10-28 18:03
tracepoints.h
299
B
-rw-r--r--
2025-10-28 18:03
write_protection.h
2.2
KB
-rw-r--r--
2025-10-28 18:03
Save
Rename
/** @file SiPropertyWriter.hpp @brief Properties Writer for SI @details Copyright (c) 2024 Acronis International GmbH @author Denis Kopyrin (Denis.Kopyrin@acronis.com) @since $Id: $ */ #pragma once #include "file_handle_tools.h" #include "si_common.h" #include "si_size.h" #ifndef BPF_PROGRAM #include <linux/compiler.h> #include <linux/string.h> #include "debug.h" #endif typedef struct { int properties_written; #ifndef BPF_PROGRAM uint32_t max_size; uint8_t* buffer; #endif uint8_t* curr; } si_property_writer_t; static inline void si_property_writer_init(si_property_writer_t* writer, SiProperty* buffer, uint32_t size) { writer->properties_written = 0; #ifndef BPF_PROGRAM writer->max_size = size; writer->buffer = (uint8_t*) buffer; #endif writer->curr = (uint8_t*) buffer; } static inline uint32_t si_property_writer_size_to_data_end(const si_property_writer_t* writer, uint8_t* ptr) { return (uint32_t) (writer->curr - ptr); } #ifndef BPF_PROGRAM static inline uint32_t si_property_writer_get_size(const si_property_writer_t* writer) { return si_property_writer_size_to_data_end(writer, writer->buffer); } #endif // Compiler may erroneously choose not inline 'si_property_writer_peek' and 'si_property_writer_commit' functions. // Those functions expect that its parameters are const propagated, so they must be always inlined. // Peeks buffer for given property id and returns buffer where value of 'size' can be written to. // Commit the change with 'si_property_writer_commit' when data will be written. // If 'si_property_writer_commit' is not going to be called, next 'peek' call will overwrite the previous one. // 'size' parameter is only used for validation purposes. static inline __attribute__((always_inline)) void* si_property_writer_peek(const si_property_writer_t* writer, fp_si_property_id_t prop_id, uint32_t size) { fp_si_property_value_type_t value_type = fp_si_property_id_to_fp_value_type(prop_id); SiPropertyValueType value_type_pub = fp_si_property_value_type_to_public_type(value_type); bool wants_vector_wrap = si_property_value_type_wants_vector_wrap(value_type_pub); uint32_t total_size; uint32_t curr_size; SiProperty* prop; void* data; total_size = size + sizeof(SiProperty) + (wants_vector_wrap ? sizeof(SiVector) : 0); #ifndef BPF_PROGRAM curr_size = si_property_writer_get_size(writer); #ifdef KERNEL_MOCK BUG_ON(curr_size + total_size > writer->max_size); #endif if (unlikely(curr_size + total_size > writer->max_size)) { WPRINTF_RATELIMITED("Buffer too small for prop_id=%d: curr_size=%u total_size=%u max_size=%u", prop_id, curr_size, total_size, writer->max_size); return NULL; } #endif prop = (SiProperty*) writer->curr; // Varsized fields are presented as SiVector if (!wants_vector_wrap) { data = prop->ValueBuffer; } else { SiVector* vector = (SiVector*) prop->ValueBuffer; data = vector->VectorBuffer; } #ifdef BPF_PROGRAM // Verifier will complain if we will overrun the buffer so help clang remove extra checks. __builtin_assume(data != NULL); #endif return data; } // Commits the previously allocated buffer with 'si_property_write_peek'. static inline __attribute__((always_inline)) void si_property_writer_commit(si_property_writer_t* writer, fp_si_property_id_t prop_id, uint32_t size) { SiProperty* prop; fp_si_property_value_type_t value_type = fp_si_property_id_to_fp_value_type(prop_id); SiPropertyValueType value_type_pub = fp_si_property_value_type_to_public_type(value_type); bool wants_vector_wrap = si_property_value_type_wants_vector_wrap(value_type_pub); uint32_t total_size; uint32_t curr_size; total_size = size + sizeof(SiProperty) + (wants_vector_wrap ? sizeof(SiVector) : 0); #ifndef BPF_PROGRAM curr_size = si_property_writer_get_size(writer); #ifdef KERNEL_MOCK BUG_ON(curr_size + total_size > writer->max_size); #endif if (unlikely(curr_size + total_size > writer->max_size)) { WPRINTF_RATELIMITED("Buffer too small for prop_id=%d: curr_size=%u total_size=%u max_size=%u", prop_id, curr_size, total_size, writer->max_size); return; } #endif // Fill in SiProperty prop = (SiProperty*) writer->curr; prop->Size = total_size; prop->PropertyId = fp_si_property_id_to_public_type(prop_id); prop->ValueType = value_type_pub; // Adjust size of SiVector if (wants_vector_wrap) { SiVector* vector = (SiVector*) prop->ValueBuffer; vector->SizeInBytes = size; } writer->curr += total_size; writer->properties_written++; } #ifdef BPF_PROGRAM static inline void si_write(void *res, const void *p, uint32_t size) { switch (size) { case 1: *(uint8_t *)res = *(uint8_t *)p; break; case 2: *(uint16_t *)res = *(uint16_t *)p; break; case 4: *(uint32_t *)res = *(uint32_t *)p; break; case 8: *(uint64_t *)res = *(uint64_t *)p; break; case 16: { *(uint64_t *)res = *(uint64_t *)p; *(uint64_t *)(res + 8) = *(uint64_t *)(p + 8); break; } default: __builtin_memcpy(res, p, size); } } #else #define si_write __builtin_memcpy #endif static inline void si_property_writer_write(si_property_writer_t* writer, fp_si_property_id_t prop_id, const void* data, uint32_t size) { void* buf = si_property_writer_peek(writer, prop_id, size); if (unlikely(!buf)) return; if (likely(0 != size)) si_write(buf, data, size); si_property_writer_commit(writer, prop_id, size); } static inline void si_property_writer_write2(si_property_writer_t* writer, fp_si_property_id_t prop_id, const void* data1, uint32_t size1, const void* data2, uint32_t size2) { uint32_t size = size1 + size2; uint8_t* buf = (uint8_t*) si_property_writer_peek(writer, prop_id, size); if (unlikely(!buf)) return; if (unlikely(0 != size1)) si_write(buf, data1, size1); if (unlikely(0 != size2)) si_write(buf + size1, data2, size2); si_property_writer_commit(writer, prop_id, size); } #define SI_FP_PROP(propId, propIdPub, valueType, type, name) \ static inline void si_property_writer_write_##name(si_property_writer_t* writer, type val) \ { return si_property_writer_write(writer, propId, &val, sizeof(val)); } #define SI_FP_PROP_SIZED(propId, propIdPub, valueType, type, name) \ static inline void si_property_writer_write_##name(si_property_writer_t* writer, type val) \ { return si_property_writer_write(writer, propId, val.value, val.length); } #define SI_FP_PROP_HANDLE(propId, propIdPub, valueType, type, name) \ static inline void si_property_writer_write_##name(si_property_writer_t* writer, type val) \ { return si_property_writer_write2(writer, propId, &val->handle_type, sizeof(val->handle_type), val->f_handle, val->handle_bytes); } #include "si_fp_properties_x.h" #undef SI_FP_PROP #undef SI_FP_PROP_SIZED #undef SI_FP_PROP_HANDLE static inline void si_event_writer_init(si_property_writer_t* writer, SiEvent* buffer, uint32_t size) { si_property_writer_init(writer, buffer->FirstProperty, size); } static inline void si_event_writer_finalize(SiEvent* event , const si_property_writer_t* writer) { event->Size = si_property_writer_size_to_data_end(writer, (uint8_t*) event); event->PropertiesNumber = writer->properties_written; } static inline void si_info_writer_init(si_property_writer_t* writer, SiInfo* buffer, uint32_t size) { si_property_writer_init(writer, buffer->FirstProperty, size); } static inline void si_info_writer_finalize(SiInfo* info , const si_property_writer_t* writer) { info->Size = si_property_writer_size_to_data_end(writer, (uint8_t*) info); info->PropertiesNumber = writer->properties_written; }