@{pid} variable broken on systems with pid_max more than 6 digits
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
AppArmor |
Fix Released
|
Undecided
|
Unassigned | ||
2.11 |
Fix Released
|
Undecided
|
Unassigned | ||
apparmor (Debian) |
Fix Released
|
Unknown
|
|||
apparmor (Ubuntu) |
Fix Released
|
Medium
|
Seyeong Kim | ||
Trusty |
Fix Released
|
Medium
|
Eric Desrochers | ||
Xenial |
Fix Released
|
Medium
|
Seyeong Kim | ||
Artful |
Fix Released
|
Medium
|
Seyeong Kim | ||
Bionic |
Fix Released
|
Medium
|
Seyeong Kim |
Bug Description
[Impact]
If PID is larger than 6 digits apparmor denies process which only affect 64-bit systems[1] where the PID_MAX_LIMIT can be generated up to 7 digits at the maximum.
This fix is committed, but not released. so all supporting version are affected.
[1] - man 5 proc
-------
/proc/sys/
This file specifies the value at which PIDs wrap around (i.e., the value in this file is one greater than the maximum PID). PIDs greater than this value are not allocated; thus, the value in this file also acts as a system-wide limit on the total number of processes and threads. The default value for this file, 32768, results in the same range of PIDs as on ear‐lier kernels. On 32-bit platforms, 32768 is the maximum value for pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22 (PID_MAX_LIMIT, approximately 4 million).
-------
[Test Case]
1. making pid over 6 digits
#!/bin/bash
for i in {1..1000000}
do
touch t
done
2. snap install --dangerous core_16-
3. you can see DENIED msgs in syslog
4. change /etc/apparmor.
5. service apparmor restart
6. service snapd restart
7. DENIED is gone
This is one way, can't reproduce this issue again even if you change back to original kernelvars, and restart snapd
OR
instead of Seyeong's touch approach, things can be manually change to 7 digits range via sysctl as long as the values are below approximately 4 millions :
Example:
$ sysctl -w kernel.
$ sysctl -w kernel.
[Regression]
* This is a minor/trivial fix which changes the pid regex only, allowing 7 digits PID instead of only 6 digits PID, we don't think there is any potential regression.
* If a regression arise, which we highly doubt, one can quickly revert the change manually and restart the service by modifying "/etc/apparmor.
[Others]
* Upstream commit:
https:/
http://
* Debian bug:
https:/
* commit 630cb2a981cdc73
Author: Vincas Dargis <email address hidden>
Date: Sat Sep 30 15:28:15 2017 +0300
Allow seven digit pid
* Affecting releases : TXZAB
-------
$ git describe --contains 630cb2a9
v2.11.95~5^2
$ rmadison apparmor
apparmor | 2.8.95~
apparmor | 2.10.95-
apparmor | 2.10.95-
apparmor | 2.10.95-0ubuntu2 | xenial
apparmor | 2.10.95-0ubuntu2.6 | xenial-security
apparmor | 2.10.95-0ubuntu2.7 | xenial-updates
apparmor | 2.11.0-2ubuntu4 | zesty
apparmor | 2.11.0-2ubuntu17 | artful
apparmor | 2.11.0-2ubuntu18 | bionic
$ rmadison -u debian apparmor
apparmor | 2.11.1-4 | unstable
-------
[Original Description]
If your kernel.pid_max sysctl is set higher than the default, say at 7 digits, the @{pid} variable no longer matches all pids, causing some breakage in any profile using it.
@{pid} is defined in /etc/apparmor.
@{pid}=
It only covers up to 6 digits.
This Ubuntu 17.04 system has:
kernel.pid_max = 4194303
And is showing
type=1400 audit(150558885
Which should be matched by
@{PROC}
in /etc/apparmor.
I'm seeing similar failures on 16.04 (2.10.95-
I am aware this is a non-default configuration, but I think this should work.
Related branches
- Steve Beattie: Approve
- intrigeri: Approve
-
Diff: 12 lines (+1/-1)1 file modifiedprofiles/apparmor.d/tunables/kernelvars (+1/-1)
tags: | added: aa-policy |
description: | updated |
tags: |
added: sts-sru-needed removed: patch |
Changed in apparmor (Ubuntu): | |
assignee: | nobody → Seyeong Kim (xtrusia) |
description: | updated |
description: | updated |
description: | updated |
description: | updated |
Changed in apparmor (Ubuntu Bionic): | |
status: | Confirmed → In Progress |
Changed in apparmor (Debian): | |
status: | Unknown → Confirmed |
description: | updated |
Changed in apparmor (Debian): | |
status: | Confirmed → Fix Released |
Changed in apparmor (Ubuntu Bionic): | |
status: | In Progress → Fix Committed |
no longer affects: | apparmor (Ubuntu Zesty) |
Changed in apparmor (Ubuntu Artful): | |
status: | New → In Progress |
Changed in apparmor (Ubuntu Xenial): | |
status: | New → In Progress |
Changed in apparmor (Ubuntu Trusty): | |
status: | New → In Progress |
tags: | added: regression-proposed-trusty |
tags: | removed: regression-proposed-trusty |
Changed in apparmor: | |
status: | Fix Committed → Fix Released |
tags: | removed: sts-sru-needed verification-needed |
Sorry, a correction (copy paste error): /@{pid} /task/[ 0-9]*/comm rw, d/abstractions/ libvirt- qemu
Which should be matched by
owner @{PROC}
in /etc/apparmor.