shell bypass 403

Cubjrnet7 Shell

: /usr/src/file_protector-1.1-1549/ [ drwxr-xr-x ]

name : rundown_protection.h
/**
 @file     rundown_protection.h
 @brief    Rundown Protection implementation for Linux kernel
 @details  Copyright (c) 2022 Acronis International GmbH
 @author   Denis Kopyrin ([email protected])
 @since    $Id: $
 */

#pragma once

#ifdef KERNEL_MOCK
#include <mock/mock.h>
#endif
#include <linux/atomic.h>
#include <linux/types.h>	// bool, [u]int(8|16|32|64)_t, atomics
#include <linux/wait.h>		// wait_event*(), wake_up*()

typedef void (*rundown_protection_finalizer_t)(void*);

typedef struct {
	atomic64_t ref_cnt;
	wait_queue_head_t wait_queue;
	rundown_protection_finalizer_t finalizer;
	void *finalizer_ctx;
} rundown_wait_block_t;

typedef struct {
	atomic64_t data;
	rundown_wait_block_t wait_block;
} simple_rundown_protection_t;

// Initializes the rundown protection.
// If 'finalizer' is set, it can be called spuriously as rundown protection is lock-free.
void simple_rundown_protection_init(simple_rundown_protection_t *srp, rundown_protection_finalizer_t finalizer, void *finalizer_ctx, bool ready);

// Thread-safely locks/Unlocks rundown protection, if lock returns 'false', do NOT call unlock and immediately leave the hook
bool simple_rundown_protection_lock(simple_rundown_protection_t *srp);
void simple_rundown_protection_unlock(simple_rundown_protection_t *srp);

// Controls for the rundown protection, NOT thread-safe. Use under the mutex.
// Rundowns the rundown protection. May call 'finalizer' spuriously.
void simple_rundown_protection_set_rundown_active(simple_rundown_protection_t *srp);
// Waits for the rundown protection to have all locks call unlock.
void simple_rundown_protection_wait_for_rundown(simple_rundown_protection_t *srp);
bool simple_rundown_protection_wait_for_rundown_timeout(simple_rundown_protection_t *srp, unsigned long timeout_jiffies);
// Enables the rundown protection allowing lock to return 'true'.
void simple_rundown_protection_set_ready(simple_rundown_protection_t *srp);
// Fetches the pending lock count from the wait block. If it is equal to 0, all hooks are exited.
// Returns reasonable values only after 'set_rundown_active' is called.
int64_t simple_rundown_protection_get_pending_count(simple_rundown_protection_t *srp);

#define rundown_protection_t simple_rundown_protection_t
#define rundown_protection_init simple_rundown_protection_init
#define rundown_protection_lock simple_rundown_protection_lock
#define rundown_protection_unlock simple_rundown_protection_unlock
#define rundown_protection_set_rundown_active simple_rundown_protection_set_rundown_active
#define rundown_protection_wait_for_rundown simple_rundown_protection_wait_for_rundown
#define rundown_protection_wait_for_rundown_timeout simple_rundown_protection_wait_for_rundown_timeout
#define rundown_protection_set_ready simple_rundown_protection_set_ready
#define rundown_protection_get_pending_count simple_rundown_protection_get_pending_count

© 2025 Cubjrnet7