Linux Serial subsystem development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Christopher Lusk" <clusk@northecho.dev>
Cc: linux-serial@vger.kernel.org
Subject: Re: [RFC PATCH 1/2] tty: mediate TIOCSIG through task_kill LSM hooks
Date: Sun, 13 Sep 2026 22:37:15 +0000	[thread overview]
Message-ID: <20260913223715.B8E511F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260913221958.839429-2-clusk@northecho.dev>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Passing SEND_SIG_PRIV (1) directly to the task_kill LSM hook causes a kernel panic when dereferenced by an eBPF LSM program.
--

commit 0444b1560acb73813cdf2e4fa3082c4f0aaf7e00
Author: Christopher Lusk <clusk@northecho.dev>

tty: mediate TIOCSIG through task_kill LSM hooks

This commit changes the pty_signal() function to invoke the task_kill LSM hook
before delivering signals to the process group. It introduces kill_pgrp_lsm()
and __kill_pgrp_info_filtered() to perform this check while holding
tasklist_lock.

Link: https://lore.kernel.org/r/56bffc24f3d0d08b45a686a48e99766b0a0821fa.1780614610.git.hexlabsecurity@proton.me

> diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
> index cc7f7091ed9a2..8f5eea156ce4c 100644
> --- a/drivers/tty/pty.c
> +++ b/drivers/tty/pty.c
[ ... ]
> @@ -195,10 +196,13 @@ static int pty_signal(struct tty_struct *tty, int sig)
>  	if (tty->link) {
>  		pgrp = tty_get_pgrp(tty->link);
>  		if (pgrp)
> -			kill_pgrp(pgrp, sig, 1);
> +			ret = kill_pgrp_lsm(pgrp, sig, 1);
>  		put_pid(pgrp);
>  	}
[ ... ]
> diff --git a/kernel/signal.c b/kernel/signal.c
> index a5e15bf09d319..758393b7257d6 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
[ ... ]
> @@ -1426,13 +1426,22 @@ int group_send_sig_info(int sig, struct kernel_siginfo *info,
[ ... ]
> +static int __kill_pgrp_info_filtered(int sig, struct kernel_siginfo *info,
> +				     struct pid *pgrp, bool check_lsm)
>  {
>  	struct task_struct *p = NULL;
>  	int ret = -ESRCH;
>  
>  	do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
> -		int err = group_send_sig_info(sig, info, p, PIDTYPE_PGID);
> +		int err = 0;
> +
> +		if (check_lsm) {
> +			rcu_read_lock();
> +			err = security_task_kill(p, info, sig, NULL);

[Severity: High]
Does this pass SEND_SIG_PRIV ((void *)1) directly to the task_kill LSM hook?

pty_signal() initiates this by calling kill_pgrp_lsm() with priv=1, which
translates to SEND_SIG_PRIV via __si_special(priv). This invalid pointer is
then passed directly as the `info` argument to security_task_kill().

When an eBPF LSM program is attached to bpf_lsm_task_kill, it receives `info`
as a PTR_TO_BTF_ID | PTR_TRUSTED pointer. The PTR_TRUSTED flag disables BPF's
PROBE_MEM fault protection, as the pointer is assumed safe to dereference.

If the eBPF program attempts to read info->si_signo, it will execute a normal
kernel memory load from address 0x1, causing an immediate kernel panic.

Before this patch, check_kill_permission() filtered out SEND_SIG_PRIV via
si_fromuser(), preventing it from ever reaching the LSM hook.

> +			rcu_read_unlock();
> +		}
> +		if (!err)
> +			err = group_send_sig_info(sig, info, p, PIDTYPE_PGID);
[ ... ]
> @@ -1886,6 +1900,18 @@ int kill_pgrp(struct pid *pid, int sig, int priv)
>  }
>  EXPORT_SYMBOL(kill_pgrp);
>  
> +int kill_pgrp_lsm(struct pid *pid, int sig, int priv)
> +{
> +	int ret;
> +
> +	read_lock(&tasklist_lock);
> +	ret = __kill_pgrp_info_filtered(sig, __si_special(priv), pid, true);
> +	read_unlock(&tasklist_lock);
> +
> +	return ret;
> +}
> +EXPORT_SYMBOL_GPL(kill_pgrp_lsm);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260913221958.839429-1-clusk@northecho.dev?part=1

  reply	other threads:[~2026-09-13 22:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-13 22:19 [RFC PATCH 0/2] Landlock signal scope and TIOCSIG Christopher Lusk
2026-09-13 22:19 ` [RFC PATCH 1/2] tty: mediate TIOCSIG through task_kill LSM hooks Christopher Lusk
2026-09-13 22:37   ` sashiko-bot [this message]
2026-09-13 22:19 ` [RFC PATCH 2/2] selftests/landlock: cover TIOCSIG signal scoping Christopher Lusk
2026-09-13 22:26   ` 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=20260913223715.B8E511F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=clusk@northecho.dev \
    --cc=linux-serial@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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