File tree 1 file changed +23
-2
lines changed
libcpu/risc-v/t-head/c906
1 file changed +23
-2
lines changed Original file line number Diff line number Diff line change @@ -131,6 +131,12 @@ rt_inline size_t rt_hw_mmu_attr_rm_perm(size_t attr, rt_base_t prot)
131
131
{
132
132
/* remove write permission for user */
133
133
case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER :
134
+ attr &= ~PTE_W ;
135
+ break ;
136
+ /* remove write permission for kernel */
137
+ case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_KERNEL :
138
+ attr &= ~PTE_W ;
139
+ break ;
134
140
default :
135
141
RT_ASSERT (0 );
136
142
}
@@ -150,6 +156,8 @@ rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot)
150
156
{
151
157
/* add write permission for user */
152
158
case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER :
159
+ attr |= (PTE_R | PTE_W | PTE_U );
160
+ break ;
153
161
default :
154
162
RT_ASSERT (0 );
155
163
}
@@ -166,13 +174,26 @@ rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot)
166
174
rt_inline rt_bool_t rt_hw_mmu_attr_test_perm (size_t attr , rt_base_t prot )
167
175
{
168
176
rt_bool_t rc = 0 ;
169
- switch (prot )
177
+ switch (prot & ~ RT_HW_MMU_PROT_USER )
170
178
{
171
179
/* test write permission for user */
172
- case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER :
180
+ case RT_HW_MMU_PROT_WRITE :
181
+ rc = ((attr & PTE_W ) && (attr & PTE_R ));
182
+ break ;
183
+ case RT_HW_MMU_PROT_READ :
184
+ rc = !!(attr & PTE_R );
185
+ break ;
186
+ case RT_HW_MMU_PROT_EXECUTE :
187
+ rc = !!(attr & PTE_X );
188
+ break ;
173
189
default :
174
190
RT_ASSERT (0 );
175
191
}
192
+
193
+ if (rc && (prot & RT_HW_MMU_PROT_USER ))
194
+ {
195
+ rc = !!(attr & PTE_U );
196
+ }
176
197
return rc ;
177
198
}
178
199
You can’t perform that action at this time.
0 commit comments