File tree Expand file tree Collapse file tree
libcpu/risc-v/t-head/c906 Expand file tree Collapse file tree 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)
131131 {
132132 /* remove write permission for user */
133133 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 ;
134140 default :
135141 RT_ASSERT (0 );
136142 }
@@ -150,6 +156,8 @@ rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot)
150156 {
151157 /* add write permission for user */
152158 case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER :
159+ attr |= (PTE_R | PTE_W | PTE_U );
160+ break ;
153161 default :
154162 RT_ASSERT (0 );
155163 }
@@ -166,13 +174,26 @@ rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot)
166174rt_inline rt_bool_t rt_hw_mmu_attr_test_perm (size_t attr , rt_base_t prot )
167175{
168176 rt_bool_t rc = 0 ;
169- switch (prot )
177+ switch (prot & ~ RT_HW_MMU_PROT_USER )
170178 {
171179 /* 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 ;
173189 default :
174190 RT_ASSERT (0 );
175191 }
192+
193+ if (rc && (prot & RT_HW_MMU_PROT_USER ))
194+ {
195+ rc = !!(attr & PTE_U );
196+ }
176197 return rc ;
177198}
178199
You can’t perform that action at this time.
0 commit comments