Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp1114923ybb; Thu, 28 Mar 2019 20:24:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqyPwwUy1/a2jV5NutqZFanFUYdnRdyBwTJVqpfNLv+qqg9sCX63I5CxozH0xGwHRhTGFnht X-Received: by 2002:a17:902:b40a:: with SMTP id x10mr6223924plr.231.1553829863914; Thu, 28 Mar 2019 20:24:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553829863; cv=none; d=google.com; s=arc-20160816; b=rKr7P47L7dbrxxXi4ZkWeLQ8e3RJm1gD/ng1L03gqRe/w1+41A0sg/mdQ57MXfUYmR 9ecsvgiARclsBuN1d24d+Dkcpqwg5YuP9kaKYR2U1XXkUh47YSKoXX8zyE/7Gpqt5H3B ARzTrbvrJl+7y5ycIyyMrrrT+LG8GgxcKoUdGZWyuUhEvbT1MOC5MNBC6jooni6KetHt luCg6g1WE/A6fvAf0fq8VrPd/gvsQm+qX4Yag9bsmF1J07QcHZpFIZQNxpmjyHOFKaFl BbcLK0YRHnMLToSk6ypdZm/yFZw7jqc8QnkKkCvoGqPRi+u1L1NquTFW/HtzoNEvxIhR ySAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:cc:to:from:date:user-agent :message-id; bh=1fFntg5KClPD0IE3/yJ++89auaZIsfYEjDkIbztrsso=; b=rGvzoZP8Gv7xMwB56v8QqW+HsvfUkRRVTf6O9oILWXfBeRtah454yHOBF5V+ouHumn JyOgzKVSw9mdS14I4912qncT56wrP8T6tGhcQqsD1O7MSzjIxKrbjeGBg4RVr3mnPlKD QgJaS/KpD4jHuyghZ/irvlrzv720CmrZ7DteTv4H282retaH/+LVAwe3udCKej6Z3EuN QBHc7p6guB2AIGwbh7fev1ZeiMrelD7qkl7DXvzFb4g7CxTsGdoU5zhxoFsfgYJn1kLs 7heZcyiKmjt1UjUQ8JPIkHXbjFP/bwNZH/u0lCbVD2XX5qd/6xSfGfImuKaLXR1wrqHE /ZjQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x8si856601pgx.484.2019.03.28.20.24.08; Thu, 28 Mar 2019 20:24:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728725AbfC2DW4 (ORCPT + 99 others); Thu, 28 Mar 2019 23:22:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:43132 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbfC2DWz (ORCPT ); Thu, 28 Mar 2019 23:22:55 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DAF3521850; Fri, 29 Mar 2019 03:22:53 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.92) (envelope-from ) id 1h9i6W-0005g7-Ru; Thu, 28 Mar 2019 23:22:52 -0400 Message-Id: <20190328230512.486297455@goodmis.org> User-Agent: quilt/0.65 Date: Thu, 28 Mar 2019 19:05:12 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Linus Torvalds , Ingo Molnar , Andrew Morton , Andy Lutomirski , Roland McGrath , Oleg Nesterov , linux-arch@vger.kernel.org, Peter Zijlstra , Thomas Gleixner , "Gustavo A. R. Silva" , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org, Dominik Brodowski , Andy Lutomirski , Kees Cook , "Eric W. Biederman" Subject: [RFC][PATCH 0/4 v2] sycalls: Remove args i and n from syscall_get_arguments() Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Two and a half years ago I sent out 3 patches and a title letter that had this[1]: At Linux Plumbers, Andy Lutomirski approached me to tell me that the syscall_get_arguments() implementation in x86 was horrible and gcc certainly gets it wrong. He said that since the tracepoints only pass in 0 and 6 for i and n repectively, it should be optimized for that case. Inspecting the kernel, I discovered that all users pass in 0 for i and only one file passing in something other than 6 for the number of arguments. That code happens to be my own code used for the special syscall tracing. That can easily be converted to just using 0 and 6 as well, and only copying what is needed. Which is probably the faster path anyway for that case. I haven't run the numbers (I can do that when I get some time), but since pretty much all use cases use 0 and 6 and that would allow these functions not to need strange logic to handle odd cases, I think this is still a win. It received positive comments but also Linus asked to remove the separate arg pointers and replace them with a single structure and fill that instead. But for some reason, this got pushed aside and forgotten (probably, had to do with the fact that I left Red Hat shortly after this). Recently, it was brought back up again[2] and I decided to dust off these patches and resubmit them. I also added one more patch to do the same for syscall_set_arguments() that I did for syscall_get_arguments() even though syscall_set_arguments() currently (and never has) had any callers. But we are told that in the near future it may have one. The changes do optimize the logic a little, but for most archs I just kept the same logic (loops and such) as I don't have a way to test it, and didn't want to break the logic. I added a new struct syscall_info that holds seccomp_data and also includes a stack pointer (sp) field. I would change seccomp_data, but because its in include/uapi/linux/seccomp.h I didn't want to touch it and break userspace. Perhaps we could add the field at the end, but I didn't want to chance it (unless others say its OK). I ran these through zero-day-bot and compiled tested these changes for all architectures except for csky which I do not have a cross compiler for. Note the following archs fail normal builds, but they fail the same with these patches: arc h8300 parisc64 Note, you may notice that I have "(Red Hat)" as the author of the first three patches (even though they are signed off by "(VMware)"). This is because those patches were originally written while I was working for Red Hat. But as I forward ported them while working for VMware, my signed-off-by reflects that. [1] - https://lore.kernel.org/lkml/20161107212634.529267342@goodmis.org/T/#u [2] - https://lore.kernel.org/lkml/20190326151244.GC16837@redhat.com/T/#u Steven Rostedt (Red Hat) (3): ptrace: Remove maxargs from task_current_syscall() tracing/syscalls: Pass in hardcoded 6 into syscall_get_arguments() syscalls: Remove start and number from syscall_get_arguments() args Steven Rostedt (VMware) (1): syscalls: Remove start and number from syscall_set_arguments() args ---- arch/arc/include/asm/syscall.h | 7 +- arch/arm/include/asm/syscall.h | 47 ++--------- arch/arm64/include/asm/syscall.h | 46 ++--------- arch/c6x/include/asm/syscall.h | 79 ++++--------------- arch/csky/include/asm/syscall.h | 26 ++----- arch/h8300/include/asm/syscall.h | 34 ++------ arch/hexagon/include/asm/syscall.h | 4 +- arch/ia64/include/asm/syscall.h | 13 +--- arch/ia64/kernel/ptrace.c | 7 +- arch/microblaze/include/asm/syscall.h | 8 +- arch/mips/include/asm/syscall.h | 3 +- arch/mips/kernel/ptrace.c | 2 +- arch/nds32/include/asm/syscall.h | 62 +++------------ arch/nios2/include/asm/syscall.h | 84 ++++---------------- arch/openrisc/include/asm/syscall.h | 12 +-- arch/parisc/include/asm/syscall.h | 30 ++----- arch/powerpc/include/asm/syscall.h | 15 ++-- arch/riscv/include/asm/syscall.h | 24 ++---- arch/s390/include/asm/syscall.h | 28 +++---- arch/sh/include/asm/syscall_32.h | 47 +++-------- arch/sh/include/asm/syscall_64.h | 8 +- arch/sparc/include/asm/syscall.h | 11 ++- arch/um/include/asm/syscall-generic.h | 78 +++---------------- arch/x86/include/asm/syscall.h | 142 ++++++++-------------------------- arch/xtensa/include/asm/syscall.h | 33 ++------ fs/proc/base.c | 17 ++-- include/asm-generic/syscall.h | 21 ++--- include/linux/ptrace.h | 11 ++- include/trace/events/syscalls.h | 2 +- kernel/seccomp.c | 2 +- kernel/trace/trace_syscalls.c | 9 ++- lib/syscall.c | 57 ++++++-------- 32 files changed, 247 insertions(+), 722 deletions(-)