From: Tao Cui <cui.tao@linux.dev>
To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org,
dgilbert@interlog.com, James.Bottomley@HansenPartnership.com,
mkp@kernel.org
Cc: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org,
mathieu.desnoyers@efficios.com, cui.tao@linux.dev,
Tao Cui <cuitao@kylinos.cn>
Subject: [PATCH v2 1/2] blktrace: require CAP_SYS_ADMIN for the blktrace interface
Date: Wed, 11 Nov 2026 22:50:33 +0800 [thread overview]
Message-ID: <20261111145034.248717-2-cui.tao@linux.dev> (raw)
In-Reply-To: <20261111145034.248717-1-cui.tao@linux.dev>
From: Tao Cui <cuitao@kylinos.cn>
BLKTRACESETUP allocates user-sized relay buffers and sets up a trace
that outlives the creating fd. Every command of the interface,
BLKTRACESETUP, BLKTRACESETUP2, BLKTRACESTART, BLKTRACESTOP,
BLKTRACETEARDOWN and, on x86_64 with CONFIG_COMPAT, the 32-bit
variant can be issued by anyone who can open the block device node,
and the sysfs trace attribute group reaches the same tracing state
without any check. A container that is handed the node can hold
trace state and relay memory on a shared queue; the relay files
themselves stay root-only (0400).
Gate blk_trace_ioctl() and sysfs_blk_trace_attr_store() with
CAP_SYS_ADMIN. The ioctls return -EPERM, the sysfs store -EACCES
like the md store callbacks it resembles. Unprivileged callers now
get one answer that depends only on their credentials, instead of
values that revealed whether a trace existed and was running.
Traces survive the creating fd by design, so a creator that drops
its privileges can no longer tear down its own trace. Such traces
wait for a privileged teardown or for the queue to go away;
blk_trace_remove() from sg_device_destroy() and
blk_trace_shutdown() from blk_unregister_queue() bound that wait for
unplugged devices.
Document the sysfs attributes in Documentation/ABI, where the group
has been missing since it was added.
Signed-off-by: Tao Cui <cuitao@kylinos.cn>
---
Documentation/ABI/stable/sysfs-block | 18 ++++++++++++++++++
kernel/trace/blktrace.c | 6 ++++++
2 files changed, 24 insertions(+)
diff --git a/Documentation/ABI/stable/sysfs-block b/Documentation/ABI/stable/sysfs-block
index 900b3fc4c72d..177c4b95a47d 100644
--- a/Documentation/ABI/stable/sysfs-block
+++ b/Documentation/ABI/stable/sysfs-block
@@ -939,3 +939,21 @@ Description:
== ==============================================
For more details refer Documentation/admin-guide/iostats.rst
+
+
+What: /sys/block/<disk>/trace/{enable,act_mask,pid,start_lba,end_lba}
+ /sys/block/<disk>/<partition>/trace/{enable,act_mask,pid,start_lba,end_lba}
+Date: January 2009
+Contact: Steven Rostedt <rostedt@goodmis.org>, Masami Hiramatsu <mhiramat@kernel.org>
+Description:
+ Configure blktrace for this device's request queue.
+ "enable" creates (1) or removes (0) the per-queue trace
+ bookkeeping; "act_mask" selects the traced action
+ categories, either as a number or as a list of category
+ names; "pid" restricts tracing to one process;
+ "start_lba" and "end_lba" bound the traced sector range.
+ Reading an attribute shows the current setting and needs
+ no privilege; writing any attribute requires
+ CAP_SYS_ADMIN. Enabling from sysfs does not set up
+ relay buffers; full tracing is armed through the
+ BLKTRACESETUP ioctl.
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 8cd2520b4c99..f56d57a924bf 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -927,6 +927,9 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
int ret, start = 0;
char b[BDEVNAME_SIZE];
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
switch (cmd) {
case BLKTRACESETUP2:
snprintf(b, sizeof(b), "%pg", bdev);
@@ -2079,6 +2082,9 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
u64 value;
ssize_t ret = -EINVAL;
+ if (!capable(CAP_SYS_ADMIN))
+ return -EACCES;
+
if (count == 0)
goto out;
--
2.53.0
next prev parent reply other threads:[~2026-11-11 14:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 14:50 [PATCH v2 0/2] blktrace: gate the blktrace interface behind CAP_SYS_ADMIN Tao Cui
2026-11-11 14:50 ` Tao Cui [this message]
2026-11-11 14:50 ` [PATCH v2 2/2] scsi: sg: Require CAP_SYS_ADMIN for BLKTRACE passthrough ioctls Tao Cui
2026-11-11 14:59 ` sashiko-bot
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=20261111145034.248717-2-cui.tao@linux.dev \
--to=cui.tao@linux.dev \
--cc=James.Bottomley@HansenPartnership.com \
--cc=axboe@kernel.dk \
--cc=cuitao@kylinos.cn \
--cc=dgilbert@interlog.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mkp@kernel.org \
--cc=rostedt@goodmis.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.