All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aleksa Sarai <cyphar@cyphar.com>
To: Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Christian Brauner <christian@brauner.io>,
	Kees Cook <keescook@chromium.org>
Cc: Aleksa Sarai <cyphar@cyphar.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	libc-alpha@sourceware.org, linux-api@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v4 0/4] lib: introduce copy_struct_from_user() helper
Date: Tue,  1 Oct 2019 11:10:51 +1000	[thread overview]
Message-ID: <20191001011055.19283-1-cyphar@cyphar.com> (raw)

Patch changelog:
 v4:
  * __always_inline copy_struct_from_user(). [Kees Cook]
  * Rework test_user_copy.ko changes. [Kees Cook]
 v3: <https://lore.kernel.org/lkml/20190930182810.6090-1-cyphar@cyphar.com/>
     <https://lore.kernel.org/lkml/20190930191526.19544-1-asarai@suse.de/>
 v2: <https://lore.kernel.org/lkml/20190925230332.18690-1-cyphar@cyphar.com/>
 v1: <https://lore.kernel.org/lkml/20190925165915.8135-1-cyphar@cyphar.com/>

This series was split off from the openat2(2) syscall discussion[1].
However, the copy_struct_to_user() helper has been dropped, because
after some discussion it appears that there is no really obvious
semantics for how copy_struct_to_user() should work on mixed-vintages
(for instance, whether [2] is the correct semantics for all syscalls).

A common pattern for syscall extensions is increasing the size of a
struct passed from userspace, such that the zero-value of the new fields
result in the old kernel behaviour (allowing for a mix of userspace and
kernel vintages to operate on one another in most cases).

Previously there was no common lib/ function that implemented
the necessary extension-checking semantics (and different syscalls
implemented them slightly differently or incompletely[3]). This series
implements the helper and ports several syscalls to use it.

Some in-kernel selftests are included in this patch. More complete
self-tests for copy_struct_from_user() are included in the openat2()
patchset.

[1]: https://lore.kernel.org/lkml/20190904201933.10736-1-cyphar@cyphar.com/

[2]: commit 1251201c0d34 ("sched/core: Fix uclamp ABI bug, clean up and
     robustify sched_read_attr() ABI logic and code")

[3]: For instance {sched_setattr,perf_event_open,clone3}(2) all do do
     similar checks to copy_struct_from_user() while rt_sigprocmask(2)
     always rejects differently-sized struct arguments.

Aleksa Sarai (4):
  lib: introduce copy_struct_from_user() helper
  clone3: switch to copy_struct_from_user()
  sched_setattr: switch to copy_struct_from_user()
  perf_event_open: switch to copy_struct_from_user()

 include/linux/bitops.h     |   7 ++
 include/linux/uaccess.h    |  70 +++++++++++++++++++
 include/uapi/linux/sched.h |   2 +
 kernel/events/core.c       |  47 +++----------
 kernel/fork.c              |  34 ++--------
 kernel/sched/core.c        |  43 ++----------
 lib/strnlen_user.c         |   8 +--
 lib/test_user_copy.c       | 136 +++++++++++++++++++++++++++++++++++--
 lib/usercopy.c             |  55 +++++++++++++++
 9 files changed, 288 insertions(+), 114 deletions(-)

-- 
2.23.0

             reply	other threads:[~2019-10-01  1:10 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-01  1:10 Aleksa Sarai [this message]
2019-10-01  1:10 ` [PATCH v4 1/4] lib: introduce copy_struct_from_user() helper Aleksa Sarai
2019-10-01  1:58   ` Kees Cook
2019-10-01  2:31     ` Christian Brauner
2019-10-01 16:28       ` Kees Cook
2019-10-10 11:19   ` Michael Ellerman
2019-10-10 11:19     ` Michael Ellerman
2019-10-10 11:40     ` Aleksa Sarai
2019-10-10 16:43       ` Kees Cook
2019-10-11  2:24       ` [PATCH] usercopy: Avoid soft lockups in test_check_nonzero_user() Michael Ellerman
2019-10-11  3:48         ` Aleksa Sarai
2019-10-11  9:43           ` Christian Brauner
2019-10-16 12:28             ` Michael Ellerman
2019-10-16 12:45               ` Christian Brauner
2019-10-12  9:54           ` Michael Ellerman
2019-10-12 10:12             ` Aleksa Sarai
2019-10-16 12:27         ` [PATCH v2] " Michael Ellerman
2019-10-16 12:36           ` Aleksa Sarai
2019-10-16 12:50           ` Christian Brauner
2019-10-16 13:03           ` Christian Brauner
2019-10-16 22:00             ` Michael Ellerman
2019-10-17  6:09               ` Christian Brauner
2019-10-23  2:23                 ` Michael Ellerman
2019-10-01  1:10 ` [PATCH v4 2/4] clone3: switch to copy_struct_from_user() Aleksa Sarai
2019-10-01  2:32   ` Christian Brauner
2019-10-01  1:10 ` [PATCH v4 3/4] sched_setattr: " Aleksa Sarai
2019-10-01  2:33   ` Christian Brauner
2019-10-01  1:10 ` [PATCH v4 4/4] perf_event_open: " Aleksa Sarai
2019-10-01  2:36   ` Christian Brauner
2019-10-01 16:01 ` [PATCH v4 0/4] lib: introduce copy_struct_from_user() helper Christian Brauner

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=20191001011055.19283-1-cyphar@cyphar.com \
    --to=cyphar@cyphar.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=christian@brauner.io \
    --cc=jolsa@redhat.com \
    --cc=keescook@chromium.org \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /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.