From: Jinjie Ruan <ruanjinjie@huawei.com>
To: "Serge E. Hallyn" <serge@hallyn.com>,
"Andrew G. Morgan" <morgan@kernel.org>
Cc: <paul@paul-moore.com>, <jmorris@namei.org>, <pjw@kernel.org>,
<tglx@kernel.org>, <peterz@infradead.org>, <debug@rivosinc.com>,
<broonie@kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-security-module@vger.kernel.org>
Subject: Re: [RFC PATCH] security: Allow dropping bounding set process-wide
Date: Mon, 28 Sep 2026 11:10:14 +0800 [thread overview]
Message-ID: <26ec4edf-8eb4-4153-8e17-7f67376f13a8@huawei.com> (raw)
In-Reply-To: <araGY/FhiKu61l5v@hallyn.com>
在 2026/9/25 22:34, Serge E. Hallyn 写道:
> Jinjie, could you reproduce your timing experiments against the
> SetProc code?
Hi Serge, the test result is as below:
| method | Description |
| ------------- | --------------------------------------------------- |
| baseline | Per-cap syscall.AllThreadsSyscall6(PR_CAPBSET_DROP),|
| | the original gVisor implementation |
| dropbound | libcap cap.DropBound() (library API, per-thread) |
| SetProc | cap.IABGetProc() + SetVector(Bound) + SetProc() |
| SetProc-min | Minimal IAB with the read overhead removed: NewIAB()|
| | + SetVector(Bound) + SetProc() |
| mask | prctl(PR_CAPBSET_DROP_MASK, lo, hi) |
All variants uniformly drop all 41 caps (cap_last_cap = 40), and both
the success rate and dropped are verified.
Sampling scale:
- Patched guest, 8 vCPU: 2 boots × 21 runs = 42 runs/point, 1050 samples
total;
- Patched guest, 32 vCPU: 21 runs per point, 525 samples total.
Mean in µs bucketed by actual thread count (sample count in parentheses)
## 8 vCPU (42 samples per point)
method 8–15 16–31 32–63 64–95
baseline 3258.9(41) 6955.9(43) 10303.9(84) 14394.3(42)
dropbound 3356.3(41) 5048.1(43) 9914.3(84) 16837.1(42)
SetProc 3365.4(41) 6255.4(43) 10179.4(84) 16799.8(42)
SetProc-min 3485.0(41) 5603.9(43) 10533.2(84) 15146.8(42)
mask 68.2(42) 92.3(42) 224.2(84) 433.7(42)
## 32 vCPU (21 samples per point)
method 8–15 16–31 32–63 64–95
baseline 8422.4(20) 8491.8(22) 17814.2(42) 21612.6(21)
dropbound 5235.5(21) 7568.9(21) 17350.8(42) 21205.5(21)
SetProc 5540.8(21) 8159.2(21) 17920.5(42) 22168.3(21)
SetProc-min 5582.8(20) 7907.7(22) 15136.0(42) 22334.5(21)
mask 114.6(21) 181.8(21) 428.5(42) 684.7(21)
So IAB.SetProc is not an optimization. Like the gVisor baseline, it
issues one PR_CAPBSET_DROP per capability on every thread
(syscall.AllThreadsSyscall); averaged over multiple repeated groups, it
is on the same order of magnitude as the baseline, or even slower.
>
> On Tue, Sep 22, 2026 at 07:10:11PM -0700, Andrew G. Morgan wrote:
>> The https://pkg.go.dev/kernel.org/pub/linux/libs/security/libcap/cap#IAB.SetProc
>> already handles this for the whole process. It can be run from main()
>> if you need it to happen early, and it will track down all of the
>> threads in the runtime.
>>
>> To Serge's point, I am also curious what benefit there is from doing
>> it more quickly. After all, this is pretty much a one-time function
>> request for any executable.
>>
>> FYI The "sendmail capabilities bug" reference is written up here:
>> https://sites.google.com/site/fullycapable/thesendmailcapabilitiesissue
>>
>> Cheers
>>
>> Andrew
>>
[...]
>>>> /*
>>>> * The next four prctl's remain to assist with transitioning a
>>>> * system from legacy UID=0 based privilege (when filesystem
>>>> --
>>>> 2.34.1
--
Best regards,
Jinjie
next prev parent reply other threads:[~2026-09-28 3:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 9:58 Jinjie Ruan
2026-09-22 17:01 ` Serge E. Hallyn
2026-09-23 2:10 ` Andrew G. Morgan
2026-09-24 8:46 ` Jinjie Ruan
2026-09-25 14:34 ` Serge E. Hallyn
2026-09-28 3:10 ` Jinjie Ruan [this message]
2026-09-28 13:13 ` Serge E. Hallyn
2026-09-24 8:05 ` Jinjie Ruan
2026-09-25 13:17 ` Serge E. Hallyn
2026-09-25 14:28 ` Andrew G. Morgan
2026-09-25 14:42 ` Serge E. Hallyn
2026-09-27 15:31 ` Andrew G. Morgan
2026-09-28 12:37 ` Jinjie Ruan
2026-09-28 12:34 ` Jinjie Ruan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=26ec4edf-8eb4-4153-8e17-7f67376f13a8@huawei.com \
--to=ruanjinjie@huawei.com \
--cc=broonie@kernel.org \
--cc=debug@rivosinc.com \
--cc=jmorris@namei.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=morgan@kernel.org \
--cc=paul@paul-moore.com \
--cc=peterz@infradead.org \
--cc=pjw@kernel.org \
--cc=serge@hallyn.com \
--cc=tglx@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®