Message ID | 20240209130620.GA8039@redhat.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-59342-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:50ea:b0:106:860b:bbdd with SMTP id r10csp837711dyd; Fri, 9 Feb 2024 05:08:19 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXsUA9+BRADLSZePIFjkSz+cBrsq4I0sZLtl0ME5TnmsoYKtph0mEic17h7eZpFUb65Gy4D081NygkFwUrOs0HFeSHdqw== X-Google-Smtp-Source: AGHT+IGAGifmx/KZd81K/d3DjOkLO5zSG6GdDlp0VuFvLrt35t8Ydl9MwYoI+nQeibhRzJqvogcc X-Received: by 2002:a05:6402:514f:b0:560:f94f:a39b with SMTP id n15-20020a056402514f00b00560f94fa39bmr1341485edd.16.1707484099116; Fri, 09 Feb 2024 05:08:19 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707484099; cv=pass; d=google.com; s=arc-20160816; b=Htx0NrJ2VP2lyDLAlrXOMQMBFp/YplJ7SBw9H342BtxzHzvTkD1Nuhsk2OuRt7UXUg FNDbtm8N+UsLZ1YbrWb+eoU6SZn3EzekvxOdacxINwRrCXReZbDluk7MMSfEhVjwsTov H9K4hn0L7dBF8iSh42/V4eHnWnx+w4+E5njAjqEigfEYV1pkNEQ/I9smk+qQCTTGMs+k GDA7i91N0lwy+Ik+emb+4Qy/DRb4KawNBskInu666PRYbExexMY1ZGx5wJqRtnZbeQlR VyjqSurhM3oWSwL/RX6LUiiO2q0Yk0aT1r6ynMM6pGekT7IQ5WMwTSSp30gvApG3/EJO Av4A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:subject:cc:to:from :date:dkim-signature; bh=+eBS2N7zPOjGNh6UoPh24dMf610glEZ74qIH328t8qY=; fh=DghpI2YVyF9ZBYZUswJCsM3c7DuJk3ElZFQav1meHJ4=; b=N8Xp36I/hX9Gzj706dWSCvt8KB18dHX1jqrUiSeAO8rpIQv3gYwLm0xWahpQGyfTHd ON9rkAixYoJ2CQcXctpfmxpxYoEPQturAqg6177pnKt0AETL1enqwMikp8leEn3VfeEz VkYVERuIzrfjjni8Z5lvYEcfmiRWnHP9m7OIlTutziHt8CA692oFVZCb8M2etfsZmxfr 0mcqNsHihaXgCXMcibtz4XPGUhh7StJz6MeCQO+N5ee50x7K8hXKIWO0ysjewwl/s8eQ yhpjHmP7w5qEp6ZS+1rtpgt4fokiLgfplDP1BjvKd0TN0U7ZABnFqrUvy5ZebmJMGo5d hFtQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CtEB4PyE; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-59342-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-59342-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Forwarded-Encrypted: i=2; AJvYcCWlhLUZqVDT/vYywSsnk8L9qd00ijw2eqx/PmC7Um+8oTxnR6lozZZQm8S7DDnOBtp+7wHGRCfx81PuP7NPQBFuAG6yUA== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id b5-20020aa7cd05000000b00560b520387csi866091edw.27.2024.02.09.05.08.18 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Feb 2024 05:08:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-59342-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CtEB4PyE; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-59342-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-59342-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 8A1181F290BA for <ouuuleilei@gmail.com>; Fri, 9 Feb 2024 13:08:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 469C5381DD; Fri, 9 Feb 2024 13:07:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="CtEB4PyE" Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23A443C463 for <linux-kernel@vger.kernel.org>; Fri, 9 Feb 2024 13:07:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707484065; cv=none; b=JptyN25OANcvvvzwBtSRw6EUXnsQ8mw3gXH0BvIDFtvnwp/MOaf40E3Nqect1by7BtRdA3CQezBtgknhKkZDTArkW7Mgxn4Q2t/vQ4Vi2nUZlqBj2xsZ/6BYPm2KVwAo2Pmltf1Y8WJIcYDbzWndPoba8Tt9PaYOJE4UcGNWjo8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707484065; c=relaxed/simple; bh=m8jassYfZl6tuikeSEiIX+a4C49CIDjBm1/1K7ahF9Y=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=CRhk/+EOvcYVoOpJf6yDCOGG30A2Cjv8g6oWdiY3cHn8exElfAwueZr5e4srFgdonsJuLp9gEMTDdGK0A/vuHLoWCzVB3ZEkQqRzsCetfci8qJK4tjiXV70i7ErkSgfM5ah+A1mOOTqX+C0hNfRKJMhMKFPljadndVEyPzrT5uc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=CtEB4PyE; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707484063; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=+eBS2N7zPOjGNh6UoPh24dMf610glEZ74qIH328t8qY=; b=CtEB4PyEATliCUUSZlP4pTrlIlA50CtwTlYl8OiGdaYS3QjzaeSw36f1gNVtDaI2e4xr/C 3LYrB08NHfXytgPEHrUIkjXZJujWgbrLyk1dVj4404MIamR4f4G8cBc16y/4RshJCBoSF+ L9QpCEUpl8uTaPCGA+2S5O3wizWKmQ0= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-470-WBcllOQQNVe5MNt3f9wJEA-1; Fri, 09 Feb 2024 08:07:39 -0500 X-MC-Unique: WBcllOQQNVe5MNt3f9wJEA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6F54D83B7E5; Fri, 9 Feb 2024 13:07:39 +0000 (UTC) Received: from dhcp-27-174.brq.redhat.com (unknown [10.45.226.84]) by smtp.corp.redhat.com (Postfix) with SMTP id AE141111FF; Fri, 9 Feb 2024 13:07:37 +0000 (UTC) Received: by dhcp-27-174.brq.redhat.com (nbSMTP-1.00) for uid 1000 oleg@redhat.com; Fri, 9 Feb 2024 14:06:23 +0100 (CET) Date: Fri, 9 Feb 2024 14:06:20 +0100 From: Oleg Nesterov <oleg@redhat.com> To: Christian Brauner <brauner@kernel.org> Cc: Andy Lutomirski <luto@amacapital.net>, "Eric W. Biederman" <ebiederm@xmission.com>, Tycho Andersen <tycho@tycho.pizza>, linux-api@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] signal: add the "int si_code" arg to prepare_kill_siginfo() Message-ID: <20240209130620.GA8039@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790426847081165316 X-GMAIL-MSGID: 1790426847081165316 |
Series |
[v2,1/2] signal: add the "int si_code" arg to prepare_kill_siginfo()
|
|
Commit Message
Oleg Nesterov
Feb. 9, 2024, 1:06 p.m. UTC
So that do_tkill() can use this helper too. This also simplifies
the next patch.
TODO: perhaps we can kill prepare_kill_siginfo() and change the
callers to use SEND_SIG_NOINFO, but this needs some changes in
__send_signal_locked() and TP_STORE_SIGINFO().
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
kernel/signal.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
Comments
On Fri, Feb 09, 2024 at 02:06:20PM +0100, Oleg Nesterov wrote: > So that do_tkill() can use this helper too. This also simplifies > the next patch. > > TODO: perhaps we can kill prepare_kill_siginfo() and change the > callers to use SEND_SIG_NOINFO, but this needs some changes in > __send_signal_locked() and TP_STORE_SIGINFO(). > > Signed-off-by: Oleg Nesterov <oleg@redhat.com> > --- Looks good to me, Reviewed-by: Christian Brauner <brauner@kernel.org>
On Fri, 09 Feb 2024 14:06:20 +0100, Oleg Nesterov wrote: > So that do_tkill() can use this helper too. This also simplifies > the next patch. > > TODO: perhaps we can kill prepare_kill_siginfo() and change the > callers to use SEND_SIG_NOINFO, but this needs some changes in > __send_signal_locked() and TP_STORE_SIGINFO(). > > [...] Applied to the vfs.pidfd branch of the vfs/vfs.git tree. Patches in the vfs.pidfd branch should appear in linux-next soon. Please report any outstanding bugs that were missed during review in a new review to the original patch series allowing us to drop it. It's encouraged to provide Acked-bys and Reviewed-bys even though the patch has now been applied. If possible patch trailers will be updated. Note that commit hashes shown below are subject to change due to rebase, trailer updates or similar. If in doubt, please check the listed branch. tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git branch: vfs.pidfd [1/2] signal: add the "int si_code" arg to prepare_kill_siginfo() https://git.kernel.org/vfs/vfs/c/3a363602809c [2/2] pidfd: change pidfd_send_signal() to respect PIDFD_THREAD https://git.kernel.org/vfs/vfs/c/2885a4b3358d
Oleg Nesterov <oleg@redhat.com> writes: > So that do_tkill() can use this helper too. This also simplifies > the next patch. > > TODO: perhaps we can kill prepare_kill_siginfo() and change the > callers to use SEND_SIG_NOINFO, but this needs some changes in > __send_signal_locked() and TP_STORE_SIGINFO(). Could you can pass in the destination type instead of the si_code? Something like I have shown below? That allows the knowledge of the siginfo details to be isolated to prepare_kill_siginfo, making it easy to verify that a the union members match the union decode for the signal/si_code combination? It is all too easy to fill in siginfo improperly. Looking at siginfo_layout() SI_USER paired with any signal results in SIL_KILL whereas SI_TKILL paired with any signal results in SIL_RT. A superset of the fields of SIL_KILL. We use clear_siginfo() so si_sigval is set to 0 for SI_TKILL which seems correct. But we do allow userspace if it specifies SI_TKILL to provide si_sigval. So the current do_tkill code is very close to being wrong. Likewise you are filling in the details to match what the existing code is doing, so you are fine. Still it is a loaded footgun to allow passing in an arbitrary si_code. Eric > Signed-off-by: Oleg Nesterov <oleg@redhat.com> > --- > kernel/signal.c | 15 +++++---------- > 1 file changed, 5 insertions(+), 10 deletions(-) > > diff --git a/kernel/signal.c b/kernel/signal.c > index c3fac06937e2..a8199fda0d61 100644 > --- a/kernel/signal.c > +++ b/kernel/signal.c > @@ -3793,12 +3793,12 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time32, compat_sigset_t __user *, uthese, > #endif > #endif > > -static inline void prepare_kill_siginfo(int sig, struct kernel_siginfo *info) > +static void prepare_kill_siginfo(int sig, struct kernel_siginfo *info, int si_code) > { > clear_siginfo(info); > info->si_signo = sig; > info->si_errno = 0; > - info->si_code = SI_USER; > + info->si_code = si_code; info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; > info->si_pid = task_tgid_vnr(current); > info->si_uid = from_kuid_munged(current_user_ns(), current_uid()); > } > @@ -3812,7 +3812,7 @@ SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) > { > struct kernel_siginfo info; > > - prepare_kill_siginfo(sig, &info); > + prepare_kill_siginfo(sig, &info, SI_USER); > > return kill_something_info(sig, &info, pid); > } > @@ -3925,7 +3925,7 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig, > (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) > goto err; > } else { > - prepare_kill_siginfo(sig, &kinfo); > + prepare_kill_siginfo(sig, &kinfo, SI_USER); > } > > /* TODO: respect PIDFD_THREAD */ > @@ -3970,12 +3970,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig) > { > struct kernel_siginfo info; > > - clear_siginfo(&info); > - info.si_signo = sig; > - info.si_errno = 0; > - info.si_code = SI_TKILL; > - info.si_pid = task_tgid_vnr(current); > - info.si_uid = from_kuid_munged(current_user_ns(), current_uid()); > + prepare_kill_siginfo(sig, &info, SI_TKILL); > > return do_send_specific(tgid, pid, sig, &info); > }
On 02/09, Eric W. Biederman wrote: > > Could you can pass in the destination type instead of the si_code? > Something like I have shown below? .. > info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; Yes, I considered this option too. OK, will send V3 tomorrow. Oleg.
On Fri, Feb 09, 2024 at 05:39:14PM +0100, Oleg Nesterov wrote: > On 02/09, Eric W. Biederman wrote: > > > > Could you can pass in the destination type instead of the si_code? > > Something like I have shown below? > > ... > > > info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; > > Yes, I considered this option too. > > OK, will send V3 tomorrow. Hm, I don't think that's necessary if you're happy to have me just fix that up in tree. Here's the two patches updated. It was straightforward but I have a baby on my lap so double check, please: From 05ffda39f6f5c887cae319274366cbf856c88fe5 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov <oleg@redhat.com> Date: Fri, 9 Feb 2024 14:06:20 +0100 Subject: [PATCH 1/2] signal: fill in si_code in prepare_kill_siginfo() So that do_tkill() can use this helper too. This also simplifies the next patch. TODO: perhaps we can kill prepare_kill_siginfo() and change the callers to use SEND_SIG_NOINFO, but this needs some changes in __send_signal_locked() and TP_STORE_SIGINFO(). Signed-off-by: Oleg Nesterov <oleg@redhat.com> Link: https://lore.kernel.org/r/20240209130620.GA8039@redhat.com Signed-off-by: Christian Brauner <brauner@kernel.org> --- kernel/signal.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/kernel/signal.c b/kernel/signal.c index c3fac06937e2..1450689302d9 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -3793,12 +3793,13 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time32, compat_sigset_t __user *, uthese, #endif #endif -static inline void prepare_kill_siginfo(int sig, struct kernel_siginfo *info) +static void prepare_kill_siginfo(int sig, struct kernel_siginfo *info, + enum pid_type type) { clear_siginfo(info); info->si_signo = sig; info->si_errno = 0; - info->si_code = SI_USER; + info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; info->si_pid = task_tgid_vnr(current); info->si_uid = from_kuid_munged(current_user_ns(), current_uid()); } @@ -3812,7 +3813,7 @@ SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) { struct kernel_siginfo info; - prepare_kill_siginfo(sig, &info); + prepare_kill_siginfo(sig, &info, PIDTYPE_TGID); return kill_something_info(sig, &info, pid); } @@ -3925,7 +3926,7 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig, (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) goto err; } else { - prepare_kill_siginfo(sig, &kinfo); + prepare_kill_siginfo(sig, &kinfo, PIDTYPE_TGID); } /* TODO: respect PIDFD_THREAD */ @@ -3970,12 +3971,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig) { struct kernel_siginfo info; - clear_siginfo(&info); - info.si_signo = sig; - info.si_errno = 0; - info.si_code = SI_TKILL; - info.si_pid = task_tgid_vnr(current); - info.si_uid = from_kuid_munged(current_user_ns(), current_uid()); + prepare_kill_siginfo(sig, &info, PIDTYPE_PID); return do_send_specific(tgid, pid, sig, &info); }
On 02/09, Christian Brauner wrote: > > On Fri, Feb 09, 2024 at 05:39:14PM +0100, Oleg Nesterov wrote: > > On 02/09, Eric W. Biederman wrote: > > > > > > Could you can pass in the destination type instead of the si_code? > > > Something like I have shown below? > > > > ... > > > > > info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; > > > > Yes, I considered this option too. > > > > OK, will send V3 tomorrow. > > Hm, I don't think that's necessary if you're happy to have me just fix > that up in tree. Thank you!!! looks obviously correct, but again, I will double check tomorrow just in case. > but I have a baby on my lap so double check, please: ;) I'm familiar with this. Oleg.
On Fri, Feb 09, 2024 at 08:36:24PM +0100, Christian Brauner wrote: > On Fri, Feb 09, 2024 at 05:39:14PM +0100, Oleg Nesterov wrote: > > On 02/09, Eric W. Biederman wrote: > > > > > > Could you can pass in the destination type instead of the si_code? > > > Something like I have shown below? > > > > ... > > > > > info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; > > > > Yes, I considered this option too. > > > > OK, will send V3 tomorrow. > > Hm, I don't think that's necessary if you're happy to have me just fix > that up in tree. Here's the two patches updated. It was straightforward > but I have a baby on my lap so double check, please: > > From 05ffda39f6f5c887cae319274366cbf856c88fe5 Mon Sep 17 00:00:00 2001 > From: Oleg Nesterov <oleg@redhat.com> > Date: Fri, 9 Feb 2024 14:06:20 +0100 > Subject: [PATCH 1/2] signal: fill in si_code in prepare_kill_siginfo() > > So that do_tkill() can use this helper too. This also simplifies > the next patch. > > TODO: perhaps we can kill prepare_kill_siginfo() and change the > callers to use SEND_SIG_NOINFO, but this needs some changes in > __send_signal_locked() and TP_STORE_SIGINFO(). > > Signed-off-by: Oleg Nesterov <oleg@redhat.com> > Link: https://lore.kernel.org/r/20240209130620.GA8039@redhat.com > Signed-off-by: Christian Brauner <brauner@kernel.org> Looks good to me as well, Reviewed-by: Tycho Andersen <tandersen@netflix.com>
diff --git a/kernel/signal.c b/kernel/signal.c index c3fac06937e2..a8199fda0d61 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -3793,12 +3793,12 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time32, compat_sigset_t __user *, uthese, #endif #endif -static inline void prepare_kill_siginfo(int sig, struct kernel_siginfo *info) +static void prepare_kill_siginfo(int sig, struct kernel_siginfo *info, int si_code) { clear_siginfo(info); info->si_signo = sig; info->si_errno = 0; - info->si_code = SI_USER; + info->si_code = si_code; info->si_pid = task_tgid_vnr(current); info->si_uid = from_kuid_munged(current_user_ns(), current_uid()); } @@ -3812,7 +3812,7 @@ SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) { struct kernel_siginfo info; - prepare_kill_siginfo(sig, &info); + prepare_kill_siginfo(sig, &info, SI_USER); return kill_something_info(sig, &info, pid); } @@ -3925,7 +3925,7 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig, (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) goto err; } else { - prepare_kill_siginfo(sig, &kinfo); + prepare_kill_siginfo(sig, &kinfo, SI_USER); } /* TODO: respect PIDFD_THREAD */ @@ -3970,12 +3970,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig) { struct kernel_siginfo info; - clear_siginfo(&info); - info.si_signo = sig; - info.si_errno = 0; - info.si_code = SI_TKILL; - info.si_pid = task_tgid_vnr(current); - info.si_uid = from_kuid_munged(current_user_ns(), current_uid()); + prepare_kill_siginfo(sig, &info, SI_TKILL); return do_send_specific(tgid, pid, sig, &info); }