2023-12-05 21:16:00 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @file access.c
|
|
|
|
|
|
* @author zhangzheng (1358745329@qq.com)
|
2024-04-08 16:09:59 +00:00
|
|
|
|
* @brief
|
2023-12-05 21:16:00 +08:00
|
|
|
|
* @version 0.1
|
|
|
|
|
|
* @date 2023-12-05
|
2024-04-08 16:09:59 +00:00
|
|
|
|
*
|
2023-12-05 21:16:00 +08:00
|
|
|
|
* @copyright Copyright (c) 2023
|
2024-04-08 16:09:59 +00:00
|
|
|
|
*
|
2023-12-05 21:16:00 +08:00
|
|
|
|
*/
|
2023-11-20 16:17:58 +08:00
|
|
|
|
#include "types.h"
|
|
|
|
|
|
#include <task.h>
|
|
|
|
|
|
#include <mm_space.h>
|
|
|
|
|
|
#include <thread.h>
|
2024-04-08 16:09:59 +00:00
|
|
|
|
#include <util.h>
|
2023-11-20 16:17:58 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 检测内存是否可访问
|
2025-03-23 17:35:56 +08:00
|
|
|
|
* TODO: 需要检查动态申请的内存
|
2023-12-05 21:16:00 +08:00
|
|
|
|
* @param tg_task 目标进程
|
|
|
|
|
|
* @param addr 开始地址
|
|
|
|
|
|
* @param size 大小
|
2024-04-08 16:09:59 +00:00
|
|
|
|
* @param ignore_null 是否忽略nullptr
|
2023-12-05 21:16:00 +08:00
|
|
|
|
* @return bool_t TRUE:可访问,FALSE:不可访问
|
2023-11-20 16:17:58 +08:00
|
|
|
|
*/
|
2023-12-02 09:49:15 +08:00
|
|
|
|
bool_t is_rw_access(task_t *tg_task, void *addr, size_t size, bool_t ignore_null)
|
2023-11-20 16:17:58 +08:00
|
|
|
|
{
|
2023-12-02 09:49:15 +08:00
|
|
|
|
if (tg_task == NULL)
|
|
|
|
|
|
{
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
}
|
2024-07-30 09:37:49 +08:00
|
|
|
|
#if !IS_ENABLED(CONFIG_MMU)
|
2023-11-20 16:17:58 +08:00
|
|
|
|
if (addr == NULL && ignore_null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void *mem;
|
|
|
|
|
|
size_t mem_size;
|
|
|
|
|
|
|
2023-12-02 09:49:15 +08:00
|
|
|
|
mm_space_get_ram_block(&tg_task->mm_space, &mem, &mem_size);
|
|
|
|
|
|
if (mem <= addr && (((char *)addr + size) <= ((char *)mem + mem_size)))
|
2023-11-20 16:17:58 +08:00
|
|
|
|
{
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
return FALSE;
|
2024-04-08 16:09:59 +00:00
|
|
|
|
#else
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
#endif
|
2023-11-20 16:17:58 +08:00
|
|
|
|
}
|