@@ -442,20 +442,22 @@ static bool is_access_to_paths_allowed(
442
442
}
443
443
444
444
if (unlikely (dentry_child1 )) {
445
- landlock_unmask_layers (find_rule (domain , dentry_child1 ),
446
- landlock_init_layer_masks (
447
- domain , LANDLOCK_MASK_ACCESS_FS ,
448
- & _layer_masks_child1 ),
449
- & _layer_masks_child1 );
445
+ landlock_unmask_layers (
446
+ find_rule (domain , dentry_child1 ),
447
+ landlock_init_layer_masks (
448
+ domain , LANDLOCK_MASK_ACCESS_FS ,
449
+ & _layer_masks_child1 , LANDLOCK_KEY_INODE ),
450
+ & _layer_masks_child1 , ARRAY_SIZE (_layer_masks_child1 ));
450
451
layer_masks_child1 = & _layer_masks_child1 ;
451
452
child1_is_directory = d_is_dir (dentry_child1 );
452
453
}
453
454
if (unlikely (dentry_child2 )) {
454
- landlock_unmask_layers (find_rule (domain , dentry_child2 ),
455
- landlock_init_layer_masks (
456
- domain , LANDLOCK_MASK_ACCESS_FS ,
457
- & _layer_masks_child2 ),
458
- & _layer_masks_child2 );
455
+ landlock_unmask_layers (
456
+ find_rule (domain , dentry_child2 ),
457
+ landlock_init_layer_masks (
458
+ domain , LANDLOCK_MASK_ACCESS_FS ,
459
+ & _layer_masks_child2 , LANDLOCK_KEY_INODE ),
460
+ & _layer_masks_child2 , ARRAY_SIZE (_layer_masks_child2 ));
459
461
layer_masks_child2 = & _layer_masks_child2 ;
460
462
child2_is_directory = d_is_dir (dentry_child2 );
461
463
}
@@ -508,14 +510,15 @@ static bool is_access_to_paths_allowed(
508
510
509
511
rule = find_rule (domain , walker_path .dentry );
510
512
allowed_parent1 = landlock_unmask_layers (
511
- rule , access_masked_parent1 , layer_masks_parent1 );
513
+ rule , access_masked_parent1 , layer_masks_parent1 ,
514
+ ARRAY_SIZE (* layer_masks_parent1 ));
512
515
allowed_parent2 = landlock_unmask_layers (
513
- rule , access_masked_parent2 , layer_masks_parent2 );
516
+ rule , access_masked_parent2 , layer_masks_parent2 ,
517
+ ARRAY_SIZE (* layer_masks_parent2 ));
514
518
515
519
/* Stops when a rule from each layer grants access. */
516
520
if (allowed_parent1 && allowed_parent2 )
517
521
break ;
518
-
519
522
jump_up :
520
523
if (walker_path .dentry == walker_path .mnt -> mnt_root ) {
521
524
if (follow_up (& walker_path )) {
@@ -554,8 +557,8 @@ static inline int check_access_path(const struct landlock_ruleset *const domain,
554
557
{
555
558
layer_mask_t layer_masks [LANDLOCK_NUM_ACCESS_FS ] = {};
556
559
557
- access_request =
558
- landlock_init_layer_masks ( domain , access_request , & layer_masks );
560
+ access_request = landlock_init_layer_masks (
561
+ domain , access_request , & layer_masks , LANDLOCK_KEY_INODE );
559
562
if (is_access_to_paths_allowed (domain , path , access_request ,
560
563
& layer_masks , NULL , 0 , NULL , NULL ))
561
564
return 0 ;
@@ -641,15 +644,17 @@ static bool collect_domain_accesses(
641
644
return true;
642
645
643
646
access_dom = landlock_init_layer_masks (domain , LANDLOCK_MASK_ACCESS_FS ,
644
- layer_masks_dom );
647
+ layer_masks_dom ,
648
+ LANDLOCK_KEY_INODE );
645
649
646
650
dget (dir );
647
651
while (true) {
648
652
struct dentry * parent_dentry ;
649
653
650
654
/* Gets all layers allowing all domain accesses. */
651
655
if (landlock_unmask_layers (find_rule (domain , dir ), access_dom ,
652
- layer_masks_dom )) {
656
+ layer_masks_dom ,
657
+ ARRAY_SIZE (* layer_masks_dom ))) {
653
658
/*
654
659
* Stops when all handled accesses are allowed by at
655
660
* least one rule in each layer.
@@ -764,7 +769,7 @@ static int current_check_refer_path(struct dentry *const old_dentry,
764
769
*/
765
770
access_request_parent1 = landlock_init_layer_masks (
766
771
dom , access_request_parent1 | access_request_parent2 ,
767
- & layer_masks_parent1 );
772
+ & layer_masks_parent1 , LANDLOCK_KEY_INODE );
768
773
if (is_access_to_paths_allowed (
769
774
dom , new_dir , access_request_parent1 ,
770
775
& layer_masks_parent1 , NULL , 0 , NULL , NULL ))
@@ -1140,7 +1145,7 @@ static int hook_file_open(struct file *const file)
1140
1145
if (is_access_to_paths_allowed (
1141
1146
dom , & file -> f_path ,
1142
1147
landlock_init_layer_masks (dom , full_access_request ,
1143
- & layer_masks ),
1148
+ & layer_masks , LANDLOCK_KEY_INODE ),
1144
1149
& layer_masks , NULL , 0 , NULL , NULL )) {
1145
1150
allowed_access = full_access_request ;
1146
1151
} else {
0 commit comments