Received: by 2002:ab2:1347:0:b0:1f4:ac9d:b246 with SMTP id g7csp71117lqg; Wed, 10 Apr 2024 16:04:16 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUkx4CvAKiwYyDmEn5Q2bPF8ToVpA7MaOqUkFA2BYgluVgTIz0HlTmHQOu+CkA/NlOmYddGhW8oVzr2K5EM3f+8dP7mZ/pqPa6IQRRq1w== X-Google-Smtp-Source: AGHT+IEdc0uSXOWTq5MzRDgVor3do9n1n36l3GJW1PwWzmj3ZiIrGRkDltI8eY8wZvPQK2xJgQcO X-Received: by 2002:a17:90a:6883:b0:2a2:9464:f58 with SMTP id a3-20020a17090a688300b002a294640f58mr3596738pjd.49.1712790256524; Wed, 10 Apr 2024 16:04:16 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712790256; cv=pass; d=google.com; s=arc-20160816; b=llQAR7ugG2iOsW030zpiuymD7WYOhOoOjHMQO3j7SHZEnxqpNZxsaD1tvbzFx7lxtk 98Kid7hTm3vyueAWDVsjawvrzPjnDNtJtqITJeEy7sxwxncya0qC9ZUu8d7pA9nl0cQI 1ZcHa8QbxsorICk0SIXgrumABhfn6Uzc/5DxKZa765IQOm1sAYiEK+g2PqKq9zd2dXBU trCeKocxhDi96cvtRM9fYNkYKD45tqBelcvTgR4WuU++SlVlNyrGAPut4oao3dEEhbA7 m8HCzkM6qZNeMYIsSwG+THSje2SQ/css6cnzzMuMt+q2yiJ9JC7tIgi2NGQG8uI33lo1 ilyQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:mime-version:list-unsubscribe:list-subscribe:list-id :precedence:references:subject:cc:to:from:dkim-signature :dkim-signature:message-id; bh=dkh9zDfRIgoUx8unNZEZZL+uvuDybK3sMar20TESOQE=; fh=joBs/8L+orz77ylyCy6wqNwwi35f7sYhLR+/TQjQjhI=; b=LcPN/8J1M5zHh5RYMT8Is7PwWEmX7bWgbkzRmwkz87ZxvEWx4Yhj6g05Senf6x53Gv HnwxIpXJTBuwfOrXnlSLQ28gvvJYANVZX7y7fWzr+vSPWKhB1eq/49h6cKXOUD+0Luws McnuIdqqPOdgmpJRngu27M2nQTVzHNxib1dhsu35qO+py6WHzUjmg+3bManO+CUg2E4T Ub6e38rXthslJzUKwwba9GOndz9gSlhvYu926J0Et6czQqNlhDnSdNguWRePDQl69uvN 70srjjy7tK+du61+c3BvQgnVjvfFRs/KPVxeLnLvuXVlspzkdUn4Ep1GV7qDNzOSbUTM Wp/g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=mytQT9Mw; dkim=neutral (no key) header.i=@linutronix.de; arc=pass (i=1 spf=pass spfdomain=linutronix.de dkim=pass dkdomain=linutronix.de dmarc=pass fromdomain=linutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-139491-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-139491-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id kk8-20020a17090b4a0800b002a2007b9726si2420769pjb.32.2024.04.10.16.04.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 16:04:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-139491-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=mytQT9Mw; dkim=neutral (no key) header.i=@linutronix.de; arc=pass (i=1 spf=pass spfdomain=linutronix.de dkim=pass dkdomain=linutronix.de dmarc=pass fromdomain=linutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-139491-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-139491-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de 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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 7CAB528A14C for ; Wed, 10 Apr 2024 22:54:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 315DB130E26; Wed, 10 Apr 2024 22:47:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="mytQT9Mw"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="H4yS4X44" Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (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 DF39F85928 for ; Wed, 10 Apr 2024 22:47:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712789242; cv=none; b=rhIAs3fyM3ys/bHPdnyuiePGxtrQmxsBcYpa4Ojv3iu0PvPeEAABp42IHDe5QpkAFeL0CJFKHoO0Ec+P9LI2VU1RtLipx5OcK4gx2k/TBN4FH+b+CIEVtGlego250nfMDyrHhmlYB3MiyESG7Vjpx4mao59AGuybRCCxgmfGm7c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712789242; c=relaxed/simple; bh=eFn5GMxZi9L4ZeXpUtDZMmDhnFXqtlmDu0N+Bo14zl0=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=L6iZUCkhRKKz8QL89I8RS95YW4OMrYRmIMz0mCPOHOVZX81nQ1JOTNdZ4c8tz8LAKX51nCYWFAOX8qmLEhK+180ufQYrByZgMtcMR6TOkSczZpKpEc1lAWVVFzYbN/rPiPHpchRxsjNcQ5Lgc3dS3F7c0g/f8Evznd15HYmmilk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=mytQT9Mw; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=H4yS4X44; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Message-ID: <20240410165553.325347784@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1712789239; 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: references:references; bh=dkh9zDfRIgoUx8unNZEZZL+uvuDybK3sMar20TESOQE=; b=mytQT9MwPFn91zP6paQCMFi/+0uOfGzj/80NEpk5KW92J2mRcA7kMfXvulNYTU/CkFBOg6 HlR4eCkVKdHFAtPcK6QYuNFlReSM9bQgJ+rS16VL32D445kMTeNyCSC0nv067k+HjKUSq3 iZrFkVuPonqw/iBlXlu8+hUVu3b+6c/tlg7A25N+fXCZAP4D7HlgqPez9OCLpN++RARqFS 8h7uE3DfPF0GN9Lm+X4FnuEwJOgNYLDJmdoLP/SqEubrpk8ieeVM8UAtNbFbQBoJJPjfQn K9RQbsVtQHIbvOgOw2lcbE9eu2Ro181C0XEOQ2kqAdzYfAnPK3lz87qy/EHM2w== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1712789239; 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: references:references; bh=dkh9zDfRIgoUx8unNZEZZL+uvuDybK3sMar20TESOQE=; b=H4yS4X44nEM523JTZp3U+DwkDzCYodCU+f0KFOphTWWYn1N9ARtPSOFoQIwbA8YIKCVp7R oWa8BdiDsCNAEkCw== From: Thomas Gleixner To: LKML Cc: Anna-Maria Behnsen , Frederic Weisbecker , John Stultz , Peter Zijlstra , Ingo Molnar , Stephen Boyd , Eric Biederman , Oleg Nesterov Subject: [patch V2 38/50] signal: Add sys_private_ptr to siginfo::_sifields::_timer References: <20240410164558.316665885@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Date: Thu, 11 Apr 2024 00:47:19 +0200 (CEST) On signal delivery collect_signal() copies the queued siginfo into a caller provided siginfo struct. The posix timer signal delivery code then uses siginfo::si_tid to lookup the timer in the hash table. That's required today as the timer and the sigqueue are separate entities and have different life time rules. The sigqueue will be embedded into struct k_itimer to address a few issues in the posix timer signal handling, which means the life time rules are not longer separate, which can spare the lookup. Due to locking rules posixtimer_deliver_signal() cannot be invoked from collect_signal(). The timer pointer could be handed down from collect_signal() to dequeue_signal(), but that's just overhead for the non-posixtimer case. There is room in the _sifields union for an extra pointer which will be used later for storing the timer pointer. This field is copied with siginfo and cleared before the info is delivered to userspace like the existing si_sys_private field. Signed-off-by: Thomas Gleixner --- arch/x86/kernel/signal_32.c | 2 +- arch/x86/kernel/signal_64.c | 2 +- include/uapi/asm-generic/siginfo.h | 2 ++ kernel/time/posix-timers.c | 4 +++- 4 files changed, 7 insertions(+), 3 deletions(-) --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c @@ -456,7 +456,7 @@ CHECK_SI_OFFSET(_timer); /* compat_siginfo_t doesn't have si_sys_private */ CHECK_SI_SIZE (_timer, 3*sizeof(int)); #else -CHECK_SI_SIZE (_timer, 4*sizeof(int)); +CHECK_SI_SIZE (_timer, 5*sizeof(int)); #endif static_assert(offsetof(siginfo32_t, si_tid) == 0x0C); static_assert(offsetof(siginfo32_t, si_overrun) == 0x10); --- a/arch/x86/kernel/signal_64.c +++ b/arch/x86/kernel/signal_64.c @@ -456,7 +456,7 @@ static_assert(offsetof(siginfo_t, si_pid static_assert(offsetof(siginfo_t, si_uid) == 0x14); CHECK_SI_OFFSET(_timer); -CHECK_SI_SIZE (_timer, 6*sizeof(int)); +CHECK_SI_SIZE (_timer, 8*sizeof(int)); static_assert(offsetof(siginfo_t, si_tid) == 0x10); static_assert(offsetof(siginfo_t, si_overrun) == 0x14); static_assert(offsetof(siginfo_t, si_value) == 0x18); --- a/include/uapi/asm-generic/siginfo.h +++ b/include/uapi/asm-generic/siginfo.h @@ -47,6 +47,7 @@ union __sifields { int _overrun; /* overrun count */ sigval_t _sigval; /* same as below */ int _sys_private; /* not to be passed to user */ + void *_sys_privptr; /* not to be passed to user */ } _timer; /* POSIX.1b signals */ @@ -146,6 +147,7 @@ typedef struct siginfo { #define si_tid _sifields._timer._tid #define si_overrun _sifields._timer._overrun #define si_sys_private _sifields._timer._sys_private +#define si_sys_privptr _sifields._timer._sys_privptr #define si_status _sifields._sigchld._status #define si_utime _sifields._sigchld._utime #define si_stime _sifields._sigchld._stime --- a/kernel/time/posix-timers.c +++ b/kernel/time/posix-timers.c @@ -289,8 +289,9 @@ bool posixtimer_deliver_signal(struct ke out: spin_lock(¤t->sighand->siglock); - /* Don't expose the si_sys_private value to userspace */ + /* Don't expose the si_sys_priv* values to userspace */ info->si_sys_private = 0; + info->si_sys_privptr = NULL; return ret; } @@ -505,6 +506,7 @@ static int do_timer_create(clockid_t whi new_timer->sigq->info.si_tid = new_timer->it_id; new_timer->sigq->info.si_code = SI_TIMER; + new_timer->sigq->info.si_sys_privptr = new_timer; if (copy_to_user(created_timer_id, &new_timer_id, sizeof (new_timer_id))) { error = -EFAULT;