specifying -O no-expr-simplify results in cache miss
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
AppArmor |
Fix Released
|
Undecided
|
Jaroslavas Karmazinas | ||
apparmor (Ubuntu) |
Fix Released
|
Undecided
|
Jamie Strandboge | ||
Disco |
Fix Released
|
Undecided
|
Jamie Strandboge | ||
Eoan |
Fix Released
|
Undecided
|
Jamie Strandboge |
Bug Description
[Impact]
* AppArmor 2.13 unconditionally invalidates its cache when parser options are specified. To decrease compile times for ARM systems, -O no-expr-simplify has been used in Ubuntu for click and snap policy for many years, but was temporarily disabled during the disco development release with the 2.13 upload so caching properly worked everywhere. Now that a simple upstream workaround is available (and already in eoan), we'd like to apply the upstream patch and re-enable -O no-expr-simplify.
* A condition of the AppArmor 2.13 feature freeze exception was to fix this bug in SRU to re-enable -O no-expr-simplify. This will help compile times for all architectures with default and typical AppArmor policy (ie, a mixture of (distro) system and snap policy), but especially ARM systems with snaps where the improvement could be in terms of minutes saved.
* Specifically, the upstream patch workaround to no longer unconditionally skip reading the cache when parser options are specified. It also re-enables an existing quilt patch to update /etc/apparmor/
[Test Case]
# setup
$ mkdir -p /tmp/aa/cache /tmp/aa/profiles
$ cp /etc/apparmor.
# no options, no cache, expect a miss and to write
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache miss: /tmp/aa/
Wrote cache: /tmp/aa/
# no options, cache, expect a hit
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache hit: /tmp/aa/
# reset
$ rm -rf /tmp/aa/cache/*
# options, no cache, expect a miss and to write
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache miss: /tmp/aa/
Wrote cache: /tmp/aa/
# options, cache, expect a hit
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache miss: /tmp/aa/
Wrote cache: /tmp/aa/
Same thing happens if omitting -O no-expr-simplify but add Optimize=
[Regression Potential]
The regression potential is considered low since the patch is simple and easily verifiable. If something went wrong, it would be around cache invalidation which the above test case will demonstrate it works correctly.
# Original description
With 2.13.2 and the most recent testsuite patches from the 2.13 branch, I find that the cache works correctly when no options are specified. Eg
# setup
$ mkdir -p /tmp/aa/cache /tmp/aa/profiles
$ cp /etc/apparmor.
# no options, no cache, expect a miss and to write
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache miss: /tmp/aa/
Wrote cache: /tmp/aa/
# no options, cache, expect a hit
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache hit: /tmp/aa/
# reset
$ rm -rf /tmp/aa/cache/*
# options, no cache, expect a miss and to write
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache miss: /tmp/aa/
Wrote cache: /tmp/aa/
# options, cache, expect a hit
$ /sbin/apparmor_
Cache: added primary location '/tmp/aa/cache'
Cache miss: /tmp/aa/
Wrote cache: /tmp/aa/
Same thing happens if omitting -O no-expr-simplify but add Optimize=
tags: | added: aa-parser |
description: | updated |
Changed in apparmor (Ubuntu Eoan): | |
status: | In Progress → Fix Committed |
Changed in apparmor: | |
status: | In Progress → Fix Released |
Changed in apparmor (Ubuntu Disco): | |
status: | Triaged → In Progress |
Changed in apparmor: | |
assignee: | nobody → John Johansen (jjohansen) |
description: | updated |
description: | updated |
Changed in apparmor: | |
assignee: | John Johansen (jjohansen) → Jaroslavas Karmazinas (cheops) |
I verified this does not affect Ubuntu 18.04 which uses 2.12.