mirror of
https://github.com/openharmony/kernel_linux_common_modules.git
synced 2026-08-27 01:31:36 -04:00
53e2babac7
Signed-off-by: limerence <shituanhui@huawei.com>
59 lines
1.9 KiB
C
59 lines
1.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
|
*/
|
|
#ifndef _EXEC_SIGNATURE_INFO_H
|
|
#define _EXEC_SIGNATURE_INFO_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/rbtree.h>
|
|
#include <linux/list.h>
|
|
|
|
struct exec_segment_info {
|
|
uintptr_t file_offset;
|
|
size_t size;
|
|
};
|
|
|
|
#define FILE_SIGNATURE_INVALID 0
|
|
#define FILE_SIGNATURE_FS_VERITY 1
|
|
#define FILE_SIGNATURE_DM_VERITY 2
|
|
#define FILE_SIGNATURE_MASK 0x0000000F
|
|
#define FILE_SIGNATURE_DELETE 0x80000000
|
|
|
|
struct exec_file_signature_info {
|
|
struct rb_node rb_node;
|
|
atomic_t reference;
|
|
unsigned int type;
|
|
uintptr_t inode;
|
|
unsigned int code_segment_count;
|
|
struct exec_segment_info *code_segments;
|
|
};
|
|
|
|
static inline bool exec_file_signature_is_fs_verity(const struct exec_file_signature_info *signature_info)
|
|
{
|
|
return (signature_info->type & FILE_SIGNATURE_MASK) == FILE_SIGNATURE_FS_VERITY;
|
|
}
|
|
|
|
static inline bool exec_file_signature_is_dm_verity(const struct exec_file_signature_info *signature_info)
|
|
{
|
|
return (signature_info->type & FILE_SIGNATURE_MASK) == FILE_SIGNATURE_DM_VERITY;
|
|
}
|
|
|
|
static inline bool exec_file_signature_is_verity(const struct exec_file_signature_info *signature_info)
|
|
{
|
|
return (signature_info->type & FILE_SIGNATURE_MASK) == FILE_SIGNATURE_DM_VERITY ||
|
|
(signature_info->type & FILE_SIGNATURE_MASK) == FILE_SIGNATURE_FS_VERITY;
|
|
}
|
|
|
|
static inline bool exec_file_signature_is_delete(const struct exec_file_signature_info *signature_info)
|
|
{
|
|
return !!(signature_info->type & FILE_SIGNATURE_DELETE);
|
|
}
|
|
|
|
int parse_elf_code_segment_info(struct file *file, struct exec_file_signature_info **code_segment_info);
|
|
int get_exec_file_signature_info(struct file *file, bool is_exec, struct exec_file_signature_info **info_ptr);
|
|
int put_exec_file_signature_info(struct exec_file_signature_info *exec_info);
|
|
void delete_exec_file_signature_info(struct inode *file_node);
|
|
#endif
|