Roman Yeryomin wrote: > Just tried CaitSith on 4.1 kernel and getting this: > > [ 10.403615] ------------[ cut here ]------------ > [ 10.408411] WARNING: CPU: 0 PID: 1 at mm/page_alloc.c:2668 > __alloc_pages_nodemask+0x164/0x624() (...snipped...) > [ 10.586902] ERROR: Out of memory at cs_realpath. > [ 10.591679] CaitSith: Rejecting access request due to out of memory.
Thank you for reporting this problem. I think this is a bug which occurs when using CaitSith on Linux 3.17 and later kernels with overlayfs. I fixed this problem ( https://osdn.jp/projects/caitsith/scm/svn/commits/186 ). I tested with ---------- # mkdir -p /mnt/a /mnt/b # mount -t xfs /dev/sdb1 /mnt/a/ # mount -t tmpfs none /mnt/b/ # mkdir /mnt/b/rw # mkdir /mnt/b/work # mount -t overlay -o lowerdir=/mnt/a/,upperdir=/mnt/b/rw/,workdir=/mnt/b/work/ overlayfs /mnt/ ---------- and a rule ---------- quota audit[1] allowed=0 denied=1024 unmatched=1024 10 acl read path.type=directory audit 1 ---------- and got similar one. ---------- [ 157.480446] ------------[ cut here ]------------ [ 157.486088] WARNING: CPU: 3 PID: 1175 at mm/slab_common.c:766 kmalloc_slab+0x85/0xa0() [ 157.495795] Modules linked in: caitsith(O) ip6t_rpfilter ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_conntrack ebtable_nat ebtable_broute bridge stp llc ebtable_filter ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_raw ip6table_filter ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_raw iptable_filter ppdev vmw_vmci pcspkr coretemp i2c_piix4 parport_pc parport shpchp ip_tables xfs libcrc32c sd_mod sr_mod cdrom ata_generic pata_acpi mptspi scsi_transport_spi mptscsih serio_raw e1000 vmwgfx drm_kms_helper ttm drm ata_piix mptbase libata i2c_core [ 157.537349] CPU: 3 PID: 1175 Comm: bash Tainted: G O 4.1.16 #10 [ 157.541707] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/31/2013 [ 157.548571] 0000000000000497 000000006717d855 ffffffff81794cce ffffffff8152828c [ 157.553372] 0000000000000000 ffffffff810578b7 ffff88003b000000 0000000000000050 [ 157.558121] ffff8800394979b8 ffff88003d57b000 ffff880039497670 ffffffff8111bec5 [ 157.562855] Call Trace: [ 157.564423] [<ffffffff8152828c>] ? dump_stack+0x40/0x50 [ 157.568007] [<ffffffff810578b7>] ? warn_slowpath_common+0x77/0xb0 [ 157.571794] [<ffffffff8111bec5>] ? kmalloc_slab+0x85/0xa0 [ 157.575154] [<ffffffff8114a1d1>] ? __kmalloc+0x11/0x150 [ 157.578853] [<ffffffffa0278891>] ? cs_realpath+0x61/0x4c0 [caitsith] [ 157.583213] [<ffffffff8117801a>] ? prepend_path+0xda/0x2d0 [ 157.587198] [<ffffffffa026fae1>] ? cs_populate_patharg+0x81/0xb0 [caitsith] [ 157.591994] [<ffffffffa02749f8>] ? cs_init_log+0x1088/0x12d0 [caitsith] [ 157.596581] [<ffffffffa0278025>] ? cs_audit_log+0x85/0x4a0 [caitsith] [ 157.601269] [<ffffffffa0270c0c>] ? cs_check_acl+0x11c/0x220 [caitsith] [ 157.605768] [<ffffffffa027131c>] ? cs_open_permission+0xfc/0x140 [caitsith] [ 157.610537] [<ffffffffa0279d88>] ? cs_file_open+0x18/0x50 [caitsith] [ 157.614941] [<ffffffff811fbbe4>] ? security_file_open+0x14/0x70 [ 157.619066] [<ffffffff8115fd92>] ? do_dentry_open+0xb2/0x320 [ 157.623053] [<ffffffff811ea180>] ? ovl_dir_fsync+0x130/0x130 [ 157.627027] [<ffffffff8116108f>] ? dentry_open+0x3f/0xb0 [ 157.630804] [<ffffffff8114a580>] ? kmem_cache_alloc+0x120/0x130 [ 157.634933] [<ffffffff811ea1d2>] ? ovl_dir_open+0x52/0xc0 [ 157.638756] [<ffffffff8115feea>] ? do_dentry_open+0x20a/0x320 [ 157.642781] [<ffffffff8116e29e>] ? do_last+0x41e/0xfc0 [ 157.646596] [<ffffffff8114a580>] ? kmem_cache_alloc+0x120/0x130 [ 157.650725] [<ffffffff81170a0e>] ? path_openat+0x8e/0x630 [ 157.654532] [<ffffffff8117218e>] ? do_filp_open+0x3e/0xa0 [ 157.658337] [<ffffffff8117e24c>] ? __alloc_fd+0x7c/0x120 [ 157.662290] [<ffffffff811613f8>] ? do_sys_open+0x148/0x230 [ 157.666140] [<ffffffff8152e157>] ? system_call_fastpath+0x12/0x6a [ 157.670365] ---[ end trace ff1fe2bff03c9b4d ]--- [ 157.673671] ERROR: Out of memory at cs_realpath. ---------- > Any idea why? > Didn't have this problem with Tomoyo Since overlayfs combines underlying mounts, not only pathname seen from the overlayfs but also pathnames seen from underlying mounts are subjected for permission checks. But d_absolute_path() for underlying mounts was returning -EINVAL error. While TOMOYO has a fallback to calculate local pathname, I forgot to apply it to CaitSith for Linux 3.17 and later kernels. I don't know how partitions are mounted in your environment, but according to https://wiki.openwrt.org/doc/techref/flash.layout , it seems to me that overlayfs is mounted on / after SquashFS is mounted on /rom and JFFS2 is mounted on /overlay . If so, applications cannot directly access pathnames under /rom and /overlay , which means that it makes little sense to check permissions for pathnames seen from SquashFS and JFFS2. In that case, you might want to check permissions for only pathname seen from overlayfs using filesystem magic number for overlayfs (i.e. 0x794C7630) like 10 acl read path.fsmagic=0x794C7630 instead of 10 acl read . _______________________________________________ tomoyo-users-en mailing list tomoyo-users-en@lists.osdn.me http://lists.osdn.me/mailman/listinfo/tomoyo-users-en