mirror of
https://github.com/openharmony/kernel_linux_common_modules.git
synced 2026-08-27 19:49:56 -04:00
@@ -309,14 +309,21 @@ static int xpm_check_prot(struct vm_area_struct *vma, unsigned long prot)
|
||||
|
||||
/* check for xpm region vma prot */
|
||||
if (vma->vm_flags & VM_XPM) {
|
||||
if (is_anon || (prot & PROT_EXEC)) {
|
||||
xpm_log_error("xpm region mmap not allow anonymous or exec permission");
|
||||
if (is_anon) {
|
||||
vma->vm_flags &= ~VM_XPM;
|
||||
goto next_check;
|
||||
}
|
||||
|
||||
if ((prot & PROT_WRITE) || (prot & PROT_EXEC)) {
|
||||
xpm_log_error("xpm region mmap not allow write or exec permission");
|
||||
report_mmap_event("xpm_check", TYPE_ABC, vma, prot);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
next_check:
|
||||
/* check for anonymous vma prot, anonymous executable permission need
|
||||
* controled by selinux
|
||||
*/
|
||||
|
||||
@@ -486,13 +486,15 @@ static void insert_new_signature_info(struct inode *file_node, int type,
|
||||
RB_CLEAR_NODE(&new_info->rb_node);
|
||||
if ((*old_info) != NULL) {
|
||||
write_lock(verity->lock);
|
||||
rb_erase_node(verity->root, verity->node_count, *old_info);
|
||||
(*old_info)->type |= FILE_SIGNATURE_DELETE;
|
||||
write_unlock(verity->lock);
|
||||
if (atomic_sub_return(1, &(*old_info)->reference) <= 0) {
|
||||
kfree(*old_info);
|
||||
*old_info = NULL;
|
||||
if ((*old_info) != NULL) {
|
||||
if (atomic_sub_return(1, &(*old_info)->reference) <= 0) {
|
||||
rb_erase_node(verity->root, verity->node_count, *old_info);
|
||||
(*old_info)->type |= FILE_SIGNATURE_DELETE;
|
||||
kfree(*old_info);
|
||||
*old_info = NULL;
|
||||
}
|
||||
}
|
||||
write_unlock(verity->lock);
|
||||
}
|
||||
|
||||
write_lock(verity->lock);
|
||||
|
||||
Reference in New Issue
Block a user