All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Martin <Dave.Martin@arm.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"Dmitry V. Levin" <ldv@altlinux.org>,
	sparclinux <sparclinux@vger.kernel.org>,
	Russell King - ARM Linux <linux@armlinux.org.uk>,
	ppc-dev <linuxppc-dev@lists.ozlabs.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [RFC PATCH 0/3] Dealing with the aliases of SI_USER
Date: Thu, 19 Apr 2018 10:28:40 +0100	[thread overview]
Message-ID: <20180419092840.GL16308@e103592.cambridge.arm.com> (raw)
In-Reply-To: <CA+55aFw1gmfFH1o+oWMo4TnU5hEczAOiY1g=eMxqYZmy9JqDYw@mail.gmail.com>

On Sun, Apr 15, 2018 at 11:16:04AM -0700, Linus Torvalds wrote:

[...]

> The other thing we should do is to get rid of the stupid padding.
> Right now "struct siginfo" is pointlessly padded to 128 bytes. That is
> completely insane, when it's always just zero in the kernel.

Agreed, inside the kernel the padding achieves nothing.

> So put that _pad[] thing inside #ifndef __KERNEL__, and make
> copy_siginfo_to_user() write the padding zeroes when copying to user
> space. The reason for the padding is "future expansion", so we do want
> to tell the user space that it's maybe up to 128 bytes in size, but if
> we don't fill it all, we shouldn't waste time and memory on clearing
> the padding internally.
> 
> I'm certainly *hoping* nobody depends on the whole 128 bytes in
> rt_sigqueueinfo(). In theory you can fill it all (as long as si_code
> is negative), but the man-page only says "si_value", and the compat
> function doesn't copy any more than that either, so any user that
> tries to fill in more than si_value is already broken. In fact, it
> might even be worth enforcing that in rt_sigqueueinfo(), just to see
> if anybody plays any games..

[...]

Digression:

Since we don't traditionally zero the tail-padding in the user sigframe,
is there a reliable way for userspace to detect newly-added fields in
siginfo other than by having an explicit sigaction sa_flags flag to
request them?  I imagine something like [1] below from the userspace
perspective.

On a separate thread, the issue of how to report syndrome information
for SIGSEGV came up [2] (such as whether the faulting instruction was a
read or a write).  This information is useful (and used) by things like
userspace sanitisers and qemu.  Currently, reporting this to userspace
relies on arch-specific cruft in the sigframe.

We're committed to maintaining what's already in each arch sigframe,
but it would be preferable to have a portable way of adding information
to siginfo in a generic way.  si_code doesn't really work for that,
since si_codes are mutually exclusive: I can't see a way of adding
supplementary information using si_code.

Anyway, that would be a separate RFC in the future (if ever).

Cheers
---Dave


[1]

static volatile int have_extflags = 0;

static void handler(int n, siginfo_t *si, void *uc)
{
	/* ... */

	if (have_extflags) {
		/* Check si->si_extflags */
	} else {
		/* fallback */
	}

	/* ... */
}

int main(void)
{
	/* ... */

	struct sigaction sa;

	/* ... */

	sa.sa_flags = SA_SIGINFO | SA_SIGINFO_EXTFLAGS;
	sa.sa_sigaction = handler;
	if (!sigaction(SIGSEGV, &sa, NULL)) {
		have_extflags = 1;
	} else {
		sa.sa_flags &= ~SA_SIGINFO_EXTFLAGS;
		if (sigaction(SIGSEGV, &sa, NULL))
			goto error;
	}

	/* ... */
}

[2] [RFC PATCH] arm64: fault: Don't leak data in ESR context for user fault on kernel VA
http://lists.infradead.org/pipermail/linux-arm-kernel/2018-April/571428.html

WARNING: multiple messages have this Message-ID (diff)
From: Dave Martin <Dave.Martin@arm.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"Dmitry V. Levin" <ldv@altlinux.org>,
	sparclinux <sparclinux@vger.kernel.org>,
	Russell King - ARM Linux <linux@armlinux.org.uk>,
	ppc-dev <linuxppc-dev@lists.ozlabs.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [RFC PATCH 0/3] Dealing with the aliases of SI_USER
Date: Thu, 19 Apr 2018 09:28:40 +0000	[thread overview]
Message-ID: <20180419092840.GL16308@e103592.cambridge.arm.com> (raw)
In-Reply-To: <CA+55aFw1gmfFH1o+oWMo4TnU5hEczAOiY1g=eMxqYZmy9JqDYw@mail.gmail.com>

On Sun, Apr 15, 2018 at 11:16:04AM -0700, Linus Torvalds wrote:

[...]

> The other thing we should do is to get rid of the stupid padding.
> Right now "struct siginfo" is pointlessly padded to 128 bytes. That is
> completely insane, when it's always just zero in the kernel.

Agreed, inside the kernel the padding achieves nothing.

> So put that _pad[] thing inside #ifndef __KERNEL__, and make
> copy_siginfo_to_user() write the padding zeroes when copying to user
> space. The reason for the padding is "future expansion", so we do want
> to tell the user space that it's maybe up to 128 bytes in size, but if
> we don't fill it all, we shouldn't waste time and memory on clearing
> the padding internally.
> 
> I'm certainly *hoping* nobody depends on the whole 128 bytes in
> rt_sigqueueinfo(). In theory you can fill it all (as long as si_code
> is negative), but the man-page only says "si_value", and the compat
> function doesn't copy any more than that either, so any user that
> tries to fill in more than si_value is already broken. In fact, it
> might even be worth enforcing that in rt_sigqueueinfo(), just to see
> if anybody plays any games..

[...]

Digression:

Since we don't traditionally zero the tail-padding in the user sigframe,
is there a reliable way for userspace to detect newly-added fields in
siginfo other than by having an explicit sigaction sa_flags flag to
request them?  I imagine something like [1] below from the userspace
perspective.

On a separate thread, the issue of how to report syndrome information
for SIGSEGV came up [2] (such as whether the faulting instruction was a
read or a write).  This information is useful (and used) by things like
userspace sanitisers and qemu.  Currently, reporting this to userspace
relies on arch-specific cruft in the sigframe.

We're committed to maintaining what's already in each arch sigframe,
but it would be preferable to have a portable way of adding information
to siginfo in a generic way.  si_code doesn't really work for that,
since si_codes are mutually exclusive: I can't see a way of adding
supplementary information using si_code.

Anyway, that would be a separate RFC in the future (if ever).

Cheers
---Dave


[1]

static volatile int have_extflags = 0;

static void handler(int n, siginfo_t *si, void *uc)
{
	/* ... */

	if (have_extflags) {
		/* Check si->si_extflags */
	} else {
		/* fallback */
	}

	/* ... */
}

int main(void)
{
	/* ... */

	struct sigaction sa;

	/* ... */

	sa.sa_flags = SA_SIGINFO | SA_SIGINFO_EXTFLAGS;
	sa.sa_sigaction = handler;
	if (!sigaction(SIGSEGV, &sa, NULL)) {
		have_extflags = 1;
	} else {
		sa.sa_flags &= ~SA_SIGINFO_EXTFLAGS;
		if (sigaction(SIGSEGV, &sa, NULL))
			goto error;
	}

	/* ... */
}

[2] [RFC PATCH] arm64: fault: Don't leak data in ESR context for user fault on kernel VA
http://lists.infradead.org/pipermail/linux-arm-kernel/2018-April/571428.html

WARNING: multiple messages have this Message-ID (diff)
From: Dave.Martin@arm.com (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 0/3] Dealing with the aliases of SI_USER
Date: Thu, 19 Apr 2018 10:28:40 +0100	[thread overview]
Message-ID: <20180419092840.GL16308@e103592.cambridge.arm.com> (raw)
In-Reply-To: <CA+55aFw1gmfFH1o+oWMo4TnU5hEczAOiY1g=eMxqYZmy9JqDYw@mail.gmail.com>

On Sun, Apr 15, 2018 at 11:16:04AM -0700, Linus Torvalds wrote:

[...]

> The other thing we should do is to get rid of the stupid padding.
> Right now "struct siginfo" is pointlessly padded to 128 bytes. That is
> completely insane, when it's always just zero in the kernel.

Agreed, inside the kernel the padding achieves nothing.

> So put that _pad[] thing inside #ifndef __KERNEL__, and make
> copy_siginfo_to_user() write the padding zeroes when copying to user
> space. The reason for the padding is "future expansion", so we do want
> to tell the user space that it's maybe up to 128 bytes in size, but if
> we don't fill it all, we shouldn't waste time and memory on clearing
> the padding internally.
> 
> I'm certainly *hoping* nobody depends on the whole 128 bytes in
> rt_sigqueueinfo(). In theory you can fill it all (as long as si_code
> is negative), but the man-page only says "si_value", and the compat
> function doesn't copy any more than that either, so any user that
> tries to fill in more than si_value is already broken. In fact, it
> might even be worth enforcing that in rt_sigqueueinfo(), just to see
> if anybody plays any games..

[...]

Digression:

Since we don't traditionally zero the tail-padding in the user sigframe,
is there a reliable way for userspace to detect newly-added fields in
siginfo other than by having an explicit sigaction sa_flags flag to
request them?  I imagine something like [1] below from the userspace
perspective.

On a separate thread, the issue of how to report syndrome information
for SIGSEGV came up [2] (such as whether the faulting instruction was a
read or a write).  This information is useful (and used) by things like
userspace sanitisers and qemu.  Currently, reporting this to userspace
relies on arch-specific cruft in the sigframe.

We're committed to maintaining what's already in each arch sigframe,
but it would be preferable to have a portable way of adding information
to siginfo in a generic way.  si_code doesn't really work for that,
since si_codes are mutually exclusive: I can't see a way of adding
supplementary information using si_code.

Anyway, that would be a separate RFC in the future (if ever).

Cheers
---Dave


[1]

static volatile int have_extflags = 0;

static void handler(int n, siginfo_t *si, void *uc)
{
	/* ... */

	if (have_extflags) {
		/* Check si->si_extflags */
	} else {
		/* fallback */
	}

	/* ... */
}

int main(void)
{
	/* ... */

	struct sigaction sa;

	/* ... */

	sa.sa_flags = SA_SIGINFO | SA_SIGINFO_EXTFLAGS;
	sa.sa_sigaction = handler;
	if (!sigaction(SIGSEGV, &sa, NULL)) {
		have_extflags = 1;
	} else {
		sa.sa_flags &= ~SA_SIGINFO_EXTFLAGS;
		if (sigaction(SIGSEGV, &sa, NULL))
			goto error;
	}

	/* ... */
}

[2] [RFC PATCH] arm64: fault: Don't leak data in ESR context for user fault on kernel VA
http://lists.infradead.org/pipermail/linux-arm-kernel/2018-April/571428.html

  parent reply	other threads:[~2018-04-19  9:28 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-09 15:22 ppc compat v4.16 regression: sending SIGTRAP or SIGFPE via kill() returns wrong values in si_pid and si_uid Dmitry V. Levin
2018-04-12  1:34 ` sparc/ppc/arm compat siginfo ABI regressions: sending " Dmitry V. Levin
2018-04-12  1:34   ` Dmitry V. Levin
2018-04-12  1:45   ` Linus Torvalds
2018-04-12  1:45     ` Linus Torvalds
2018-04-12  9:58   ` Russell King - ARM Linux
2018-04-12  9:58     ` Russell King - ARM Linux
2018-04-12 11:03     ` Dmitry V. Levin
2018-04-12 11:03       ` Dmitry V. Levin
2018-04-12 11:03       ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dmitry V. Levin
2018-04-12 12:19       ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-12 12:19         ` Russell King - ARM Linux
2018-04-12 12:19         ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-12 12:49         ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Dmitry V. Levin
2018-04-12 12:49           ` Dmitry V. Levin
2018-04-12 12:49           ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dmitry V. Levin
2018-04-12 13:14           ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-12 13:14             ` Russell King - ARM Linux
2018-04-12 13:14             ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-12 16:50             ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Linus Torvalds
2018-04-12 16:50               ` Linus Torvalds
2018-04-12 16:50               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Linus Torvalds
2018-04-12 17:20               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-12 17:20                 ` Russell King - ARM Linux
2018-04-12 17:20                 ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-12 17:22                 ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Linus Torvalds
2018-04-12 17:22                   ` Linus Torvalds
2018-04-12 17:22                   ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Linus Torvalds
2018-04-13  9:42                   ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-13  9:42                     ` Russell King - ARM Linux
2018-04-13  9:42                     ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-13 16:33                     ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Linus Torvalds
2018-04-13 16:33                       ` Linus Torvalds
2018-04-13 16:33                       ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Linus Torvalds
2018-04-13 17:08                       ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Dave Martin
2018-04-13 17:08                         ` Dave Martin
2018-04-13 17:08                         ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dave Martin
2018-04-13 17:54                         ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-13 17:54                           ` Russell King - ARM Linux
2018-04-13 17:54                           ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-13 18:23                           ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Linus Torvalds
2018-04-13 18:23                             ` Linus Torvalds
2018-04-13 18:23                             ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Linus Torvalds
2018-04-13 18:45                             ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Dave Martin
2018-04-13 18:45                               ` Dave Martin
2018-04-13 18:45                               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dave Martin
2018-04-13 19:53                               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Linus Torvalds
2018-04-13 19:53                                 ` Linus Torvalds
2018-04-13 19:53                                 ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Linus Torvalds
2018-04-15 13:12                                 ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-15 13:12                                   ` Russell King - ARM Linux
2018-04-15 13:12                                   ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-15 15:22                                   ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Eric W. Biederman
2018-04-15 15:22                                     ` Eric W. Biederman
2018-04-15 15:22                                     ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Eric W. Biederman
2018-04-15 15:56                                   ` [RFC PATCH 0/3] Dealing with the aliases of SI_USER Eric W. Biederman
2018-04-15 15:56                                     ` Eric W. Biederman
2018-04-15 15:56                                     ` Eric W. Biederman
2018-04-15 15:56                                     ` Eric W. Biederman
2018-04-15 15:57                                     ` [RFC PATCH 1/3] signal: Ensure every siginfo we send has all bits initialized Eric W. Biederman
2018-04-15 15:57                                       ` Eric W. Biederman
2018-04-15 15:57                                       ` Eric W. Biederman
2018-04-15 15:57                                       ` Eric W. Biederman
2018-04-17 13:23                                       ` Dave Martin
2018-04-17 13:23                                         ` Dave Martin
2018-04-17 13:23                                         ` Dave Martin
2018-04-17 19:37                                         ` Eric W. Biederman
2018-04-17 19:37                                           ` Eric W. Biederman
2018-04-17 19:37                                           ` Eric W. Biederman
2018-04-18 12:47                                           ` Dave Martin
2018-04-18 12:47                                             ` Dave Martin
2018-04-18 12:47                                             ` Dave Martin
2018-04-18 14:22                                             ` Eric W. Biederman
2018-04-18 14:22                                               ` Eric W. Biederman
2018-04-18 14:22                                               ` Eric W. Biederman
2018-04-19  8:26                                               ` Dave Martin
2018-04-19  8:26                                                 ` Dave Martin
2018-04-19  8:26                                                 ` Dave Martin
2018-04-15 15:58                                     ` [RFC PATCH 2/3] signal: Reduce copy_siginfo_to_user to just copy_to_user Eric W. Biederman
2018-04-15 15:58                                       ` Eric W. Biederman
2018-04-15 15:58                                       ` Eric W. Biederman
2018-04-15 15:58                                       ` Eric W. Biederman
2018-04-15 15:59                                     ` [RFC PATCH 3/3] signal: Stop special casing TRAP_FIXME and FPE_FIXME in siginfo_layout Eric W. Biederman
2018-04-15 15:59                                       ` Eric W. Biederman
2018-04-15 15:59                                       ` Eric W. Biederman
2018-04-15 15:59                                       ` Eric W. Biederman
2018-04-15 18:16                                     ` [RFC PATCH 0/3] Dealing with the aliases of SI_USER Linus Torvalds
2018-04-15 18:16                                       ` Linus Torvalds
2018-04-15 18:16                                       ` Linus Torvalds
2018-04-16  2:03                                       ` Eric W. Biederman
2018-04-16  2:03                                         ` Eric W. Biederman
2018-04-16  2:03                                         ` Eric W. Biederman
2018-04-18 17:58                                       ` Eric W. Biederman
2018-04-18 17:58                                         ` Eric W. Biederman
2018-04-18 17:58                                         ` Eric W. Biederman
2018-04-18 17:58                                         ` Eric W. Biederman
2018-04-18 17:58                                         ` Eric W. Biederman
2018-04-19  9:28                                       ` Dave Martin [this message]
2018-04-19  9:28                                         ` Dave Martin
2018-04-19  9:28                                         ` Dave Martin
2018-04-19 14:40                                         ` Eric W. Biederman
2018-04-19 14:40                                           ` Eric W. Biederman
2018-04-19 14:40                                           ` Eric W. Biederman
2018-04-13 18:35                           ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Dave Martin
2018-04-13 18:35                             ` Dave Martin
2018-04-13 18:35                             ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dave Martin
2018-04-13 18:50                             ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Russell King - ARM Linux
2018-04-13 18:50                               ` Russell King - ARM Linux
2018-04-13 18:50                               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Russell King - ARM Linux
2018-04-13 18:56                               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Dave Martin
2018-04-13 18:56                                 ` Dave Martin
2018-04-13 18:56                                 ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dave Martin
2018-04-12 17:35               ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in si_pid and si_uid Dmitry V. Levin
2018-04-12 17:35                 ` Dmitry V. Levin
2018-04-12 17:35                 ` sparc/ppc/arm compat siginfo ABI regressions: sending SIGFPE via kill() returns wrong values in Dmitry V. Levin

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=20180419092840.GL16308@e103592.cambridge.arm.com \
    --to=dave.martin@arm.com \
    --cc=ebiederm@xmission.com \
    --cc=ldv@altlinux.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=sparclinux@vger.kernel.org \
    --cc=torvalds@linux-foundation.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.