From patchwork Wed Oct 12 03:53:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1689025 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=PqB0yhjx; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnJtn65YWz23k3 for ; Wed, 12 Oct 2022 15:04:17 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4MnJtn0XTHz3c2s for ; Wed, 12 Oct 2022 15:04:17 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=PqB0yhjx; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::635; helo=mail-pl1-x635.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=PqB0yhjx; dkim-atps=neutral Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) (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 lists.ozlabs.org (Postfix) with ESMTPS id 4MnJsP5l13z2xHw for ; Wed, 12 Oct 2022 15:03:03 +1100 (AEDT) Received: by mail-pl1-x635.google.com with SMTP id i6so10061032pli.12 for ; Tue, 11 Oct 2022 21:03:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=6fsq8d8o8NqkJCmcTaHLZmccIkhkF64BPG0szpw2iUs=; b=PqB0yhjx3Rg5XJ/kmvvAbowt92Uur0/5ynpFy4qrX0GE/TQXiTP17Vm5H1vUuqe/sp /yhLfvsnEVLVLd6ndZs4bEtZ+UW5yElzzcBmahf4BKLl3+lgn8qAHAAdXganU2cVlEcJ GH+k0FKASdSdd0qEkrhbJ+S+LJDHNtpI17qvYdug1QO+AAZp90CW/PhZlgOlScB0UM+Y fCBymU4zgvJG6C68yLqQc4QhQLB1HrvK4k2cmk8I9y5eltZdKN86EwiyCkQvunclp7ws 2bEC7F+0LlQuagUPhAGeM9IdKzCRsf6vj5D6KrUWSZn97IJnC94kfDetqw0jRYO6x2zZ CNmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6fsq8d8o8NqkJCmcTaHLZmccIkhkF64BPG0szpw2iUs=; b=7w2rUlMMO3U/fSh/yteiJDgGWEqEimYIlbjZxKEtMNa+VVO6PN1m7LKKKByBtBvoHq FclL5J5+mO6X9xxmQ+Mv391wguta4n3Wz0kUJiQ5nexfA4fvmIyd8oSO9feo3vNJ6eQ1 gCUvasoVdmE/sxcRq1G62jO3EKj8p/XdKbJL9Sde+nkP0Pn225tJWcOaou2ii4V/vnNb ZL6jTX+8CgcfRW75dIHwnaPFqifKYDyiRFWwUCju0Quu/LpDoZER4wmSoQW1hRRmSXr7 g7vV/3tREl5IACXN2FtYaxuA4vvhUVLB5alPyVtv/chmj9grYVURxYzHQPrxChscY+nH cIaQ== X-Gm-Message-State: ACrzQf0WcLJal4KfVwj1lNuOQ787ky43XzQ6cE1+Am/IWjauU5RDAevq A2v/OjtaWoQpjtI4V9xtjxB+YkRv610= X-Google-Smtp-Source: AMsMyM5iSOJfmrP1vfjH33E3RZab7LJr2mI5mOKNJ1Of0Bydv/zNPlf9nlvXAvgaGA+hlK4OYoeUcg== X-Received: by 2002:a17:902:7043:b0:184:40e5:b5e7 with SMTP id h3-20020a170902704300b0018440e5b5e7mr2952497plt.98.1665547379126; Tue, 11 Oct 2022 21:02:59 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([118.208.156.99]) by smtp.gmail.com with ESMTPSA id w11-20020a170902e88b00b0017e64da44c5sm9447140plg.203.2022.10.11.21.02.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Oct 2022 21:02:58 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 1/2] powerpc/32: fix syscall wrappers with 64-bit arguments of unaligned register-pairs Date: Wed, 12 Oct 2022 13:53:34 +1000 Message-Id: <20221012035335.866440-1-npiggin@gmail.com> X-Mailer: git-send-email 2.37.2 MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Jason A . Donenfeld" , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" powerpc 32-bit system call (and function) calling convention for 64-bit arguments requires the next available odd-pair (two sequential registers with the first being odd-numbered) from the standard register argument allocation. The first argument register is r3, so a 64-bit argument that appears at an even position in the argument list must skip a register (unless there were preceeding 64-bit arguments, which might throw things off). This requires non-standard compat definitions to deal with the holes in the argument register allocation. With pt_regs syscall wrappers which use a standard mapper to map pt_regs GPRs to function arguments, 32-bit kernels hit the same basic problem, the standard definitions don't cope with the unused argument registers. Fix this by having 32-bit kernels share those syscall definitions with compat. Thanks to Jason for spending a lot of time finding and bisecting this and developing a trivial reproducer. The perfect bug report. Reported-by: Jason A. Donenfeld Signed-off-by: Nicholas Piggin Reviewed-by: Arnd Bergmann --- Since posting the patch in the bug thread: - dropped sync_file_range2 from the ppc32 syscalls. - updated some comments on sys_ppc32.c, which now has a different purpose. - still have not explicitly tested all convrted syscalls on ppc32 (I don't have a great ppc32 environment to test such things, will have to try rectify that...). - Build fixes from mpe. - Thanks to jms and mpe for helping with debugging. Thanks, Nick arch/powerpc/include/asm/syscalls.h | 16 ++++++++++ arch/powerpc/kernel/Makefile | 1 + arch/powerpc/kernel/sys_ppc32.c | 38 ++++++++++++++++++------ arch/powerpc/kernel/syscalls/syscall.tbl | 16 ++++++---- 4 files changed, 56 insertions(+), 15 deletions(-) diff --git a/arch/powerpc/include/asm/syscalls.h b/arch/powerpc/include/asm/syscalls.h index 9840d572da55..a1142496cd58 100644 --- a/arch/powerpc/include/asm/syscalls.h +++ b/arch/powerpc/include/asm/syscalls.h @@ -89,6 +89,22 @@ long compat_sys_rt_sigreturn(void); * responsible for combining parameter pairs. */ +#ifdef CONFIG_PPC32 +long sys_ppc_pread64(unsigned int fd, + char __user *ubuf, compat_size_t count, + u32 reg6, u32 pos1, u32 pos2); +long sys_ppc_pwrite64(unsigned int fd, + const char __user *ubuf, compat_size_t count, + u32 reg6, u32 pos1, u32 pos2); +long sys_ppc_readahead(int fd, u32 r4, + u32 offset1, u32 offset2, u32 count); +long sys_ppc_truncate64(const char __user *path, u32 reg4, + unsigned long len1, unsigned long len2); +long sys_ppc_ftruncate64(unsigned int fd, u32 reg4, + unsigned long len1, unsigned long len2); +long sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2, + size_t len, int advice); +#endif #ifdef CONFIG_COMPAT long compat_sys_mmap2(unsigned long addr, size_t len, unsigned long prot, unsigned long flags, diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 1f121c188805..d382564034a7 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -73,6 +73,7 @@ obj-y := cputable.o syscalls.o \ obj-y += ptrace/ obj-$(CONFIG_PPC64) += setup_64.o irq_64.o\ paca.o nvram_64.o note.o +obj-$(CONFIG_PPC32) += sys_ppc32.o obj-$(CONFIG_COMPAT) += sys_ppc32.o signal_32.o obj-$(CONFIG_VDSO32) += vdso32_wrapper.o obj-$(CONFIG_PPC_WATCHDOG) += watchdog.o diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c index dcc3c9fd4cfd..6bdfe11a7689 100644 --- a/arch/powerpc/kernel/sys_ppc32.c +++ b/arch/powerpc/kernel/sys_ppc32.c @@ -1,13 +1,23 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * sys_ppc32.c: Conversion between 32bit and 64bit native syscalls. + * sys_ppc32.c: 32-bit system calls with complex calling conventions. * * Copyright (C) 2001 IBM * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) * - * These routines maintain argument size conversion between 32bit and 64bit - * environment. + * 32-bit system calls with 64-bit arguments pass those in register pairs. + * This must be specially dealt with on 64-bit kernels. The compat_arg_u64_dual + * in generic compat syscalls is not always usable because the register + * pairing is constrained depending on preceeding arguments. + * + * An analogous problem exists on 32-bit kernels with ARCH_HAS_SYSCALL_WRAPPER, + * the defined system call functions take the pt_regs as an argument, and there + * is a mapping macro which maps registers to arguments + * (SC_POWERPC_REGS_TO_ARGS) which also does not deal with these 64-bit + * arguments. + * + * This file contains these system calls. */ #include @@ -47,7 +57,17 @@ #include #include -COMPAT_SYSCALL_DEFINE6(ppc_pread64, +#ifdef CONFIG_PPC32 +#define PPC32_SYSCALL_DEFINE4 SYSCALL_DEFINE4 +#define PPC32_SYSCALL_DEFINE5 SYSCALL_DEFINE5 +#define PPC32_SYSCALL_DEFINE6 SYSCALL_DEFINE6 +#else +#define PPC32_SYSCALL_DEFINE4 COMPAT_SYSCALL_DEFINE4 +#define PPC32_SYSCALL_DEFINE5 COMPAT_SYSCALL_DEFINE5 +#define PPC32_SYSCALL_DEFINE6 COMPAT_SYSCALL_DEFINE6 +#endif + +PPC32_SYSCALL_DEFINE6(ppc_pread64, unsigned int, fd, char __user *, ubuf, compat_size_t, count, u32, reg6, u32, pos1, u32, pos2) @@ -55,7 +75,7 @@ COMPAT_SYSCALL_DEFINE6(ppc_pread64, return ksys_pread64(fd, ubuf, count, merge_64(pos1, pos2)); } -COMPAT_SYSCALL_DEFINE6(ppc_pwrite64, +PPC32_SYSCALL_DEFINE6(ppc_pwrite64, unsigned int, fd, const char __user *, ubuf, compat_size_t, count, u32, reg6, u32, pos1, u32, pos2) @@ -63,28 +83,28 @@ COMPAT_SYSCALL_DEFINE6(ppc_pwrite64, return ksys_pwrite64(fd, ubuf, count, merge_64(pos1, pos2)); } -COMPAT_SYSCALL_DEFINE5(ppc_readahead, +PPC32_SYSCALL_DEFINE5(ppc_readahead, int, fd, u32, r4, u32, offset1, u32, offset2, u32, count) { return ksys_readahead(fd, merge_64(offset1, offset2), count); } -COMPAT_SYSCALL_DEFINE4(ppc_truncate64, +PPC32_SYSCALL_DEFINE4(ppc_truncate64, const char __user *, path, u32, reg4, unsigned long, len1, unsigned long, len2) { return ksys_truncate(path, merge_64(len1, len2)); } -COMPAT_SYSCALL_DEFINE4(ppc_ftruncate64, +PPC32_SYSCALL_DEFINE4(ppc_ftruncate64, unsigned int, fd, u32, reg4, unsigned long, len1, unsigned long, len2) { return ksys_ftruncate(fd, merge_64(len1, len2)); } -COMPAT_SYSCALL_DEFINE6(ppc32_fadvise64, +PPC32_SYSCALL_DEFINE6(ppc32_fadvise64, int, fd, u32, unused, u32, offset1, u32, offset2, size_t, len, int, advice) { diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl index 2bca64f96164..e9e0df4f9a61 100644 --- a/arch/powerpc/kernel/syscalls/syscall.tbl +++ b/arch/powerpc/kernel/syscalls/syscall.tbl @@ -228,8 +228,10 @@ 176 64 rt_sigtimedwait sys_rt_sigtimedwait 177 nospu rt_sigqueueinfo sys_rt_sigqueueinfo compat_sys_rt_sigqueueinfo 178 nospu rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend -179 common pread64 sys_pread64 compat_sys_ppc_pread64 -180 common pwrite64 sys_pwrite64 compat_sys_ppc_pwrite64 +179 32 pread64 sys_ppc_pread64 compat_sys_ppc_pread64 +179 64 pread64 sys_pread64 +180 32 pwrite64 sys_ppc_pwrite64 compat_sys_ppc_pwrite64 +180 64 pwrite64 sys_pwrite64 181 common chown sys_chown 182 common getcwd sys_getcwd 183 common capget sys_capget @@ -242,10 +244,11 @@ 188 common putpmsg sys_ni_syscall 189 nospu vfork sys_vfork 190 common ugetrlimit sys_getrlimit compat_sys_getrlimit -191 common readahead sys_readahead compat_sys_ppc_readahead +191 32 readahead sys_ppc_readahead compat_sys_ppc_readahead +191 64 readahead sys_readahead 192 32 mmap2 sys_mmap2 compat_sys_mmap2 -193 32 truncate64 sys_truncate64 compat_sys_ppc_truncate64 -194 32 ftruncate64 sys_ftruncate64 compat_sys_ppc_ftruncate64 +193 32 truncate64 sys_ppc_truncate64 compat_sys_ppc_truncate64 +194 32 ftruncate64 sys_ppc_ftruncate64 compat_sys_ppc_ftruncate64 195 32 stat64 sys_stat64 196 32 lstat64 sys_lstat64 197 32 fstat64 sys_fstat64 @@ -288,7 +291,8 @@ 230 common io_submit sys_io_submit compat_sys_io_submit 231 common io_cancel sys_io_cancel 232 nospu set_tid_address sys_set_tid_address -233 common fadvise64 sys_fadvise64 compat_sys_ppc32_fadvise64 +233 32 fadvise64 sys_ppc32_fadvise64 compat_sys_ppc32_fadvise64 +233 64 fadvise64 sys_fadvise64 234 nospu exit_group sys_exit_group 235 nospu lookup_dcookie sys_lookup_dcookie compat_sys_lookup_dcookie 236 common epoll_create sys_epoll_create From patchwork Wed Oct 12 03:53:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1689023 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=iES0p44t; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnJsm5TF2z23k3 for ; Wed, 12 Oct 2022 15:03:24 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4MnJsl6sxSz3bjf for ; Wed, 12 Oct 2022 15:03:23 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=iES0p44t; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::635; helo=mail-pl1-x635.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=iES0p44t; dkim-atps=neutral Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) (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 lists.ozlabs.org (Postfix) with ESMTPS id 4MnJsP5pRbz2xtF for ; Wed, 12 Oct 2022 15:03:04 +1100 (AEDT) Received: by mail-pl1-x635.google.com with SMTP id l4so15118885plb.8 for ; Tue, 11 Oct 2022 21:03:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=czJrj/731IUlvmoVQv8+EB2Iw53LGmAfM1eDO+tGk7M=; b=iES0p44tkSov9mAQ1iwQeEwpr2WkeblkbjINuFVKjky5j6OVDtjIw+qJGpJkj4GP8i FH611H9QnYI08XmUCVQwJ2aeSG5tr7pIHacCDmmhEtlvxDBX/3N5b6Iw/K1oq2Te/Ao7 +j1Nnew2r3dsykbSC+IuMYOQL5O9eck+407s6FKCqKqj52tcfOlAtEIHogdvwfLQlgiZ 6tY7fxncDNzG98hqSaycSP2axlJu9ANZDWWxQQnlBGF+QANONdl+yTOy+ADlK73FTTbf jnA5vdH5y6sRcaiL3ENT4RSSrQ6PBRMFigpOSYhfEfwG+tCadQGRuosqLV1m/dZpsDSG SQ0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=czJrj/731IUlvmoVQv8+EB2Iw53LGmAfM1eDO+tGk7M=; b=s+0zJyn5kwP3jwK/TX7lfgj8PfJjh3xjutR4qr+4lVSVyJXjYmY3hjDRuzC9+sh3GR 1RAft3KpA/GwZS3ae8S490Zl/k+L7L177mjXEdfm0iIX6xPjML53odWi0kW6IqmmyZJY lblWjOgKBbZ1Cd9eKjV2TW0+XiO3C+8vay+Ws5WUQsQgV1fe1A7pRF1FNnPzNAPBu3Ag ihw58luH/jjsiJDYc9bpBvhv5mrcRhhQ/nOU14lYKsJ6mNSY3mH4GKNgcERo9dwgeKJe 7NH47yFJpunMP+MPWs3dV4vYjc8OU6jRNW4f05kdF+VKLLteC7ejpg571NcpoynuxiIc NRrg== X-Gm-Message-State: ACrzQf06FqwwCWHbchR7AVTHdfl7Mh1ztFZ5Bbk/b/1aAJZB1MThGteH gLi0NB9HK4FWji2yhqTvebGM5DUv3xU= X-Google-Smtp-Source: AMsMyM6JAMDkk1mgKqWJTfLjoP/PnCxAvDYWQXI5XV2hCQf3Y4hBbP+IDI8dUxvwb1E0D9U8j9YEhA== X-Received: by 2002:a17:902:f60b:b0:178:6a49:d4e3 with SMTP id n11-20020a170902f60b00b001786a49d4e3mr28200346plg.75.1665547382565; Tue, 11 Oct 2022 21:03:02 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([118.208.156.99]) by smtp.gmail.com with ESMTPSA id w11-20020a170902e88b00b0017e64da44c5sm9447140plg.203.2022.10.11.21.02.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Oct 2022 21:03:01 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 2/2] powerpc: move sync_file_range2 compat definition Date: Wed, 12 Oct 2022 13:53:35 +1000 Message-Id: <20221012035335.866440-2-npiggin@gmail.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221012035335.866440-1-npiggin@gmail.com> References: <20221012035335.866440-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Jason A . Donenfeld" , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" sync_file_range2 is not a special unaligned-odd-pair calling convention syscall, it's just a regular one that does not have a generic compat definition. Move it out of sys_ppc32.c and into syscalls.c. Signed-off-by: Nicholas Piggin --- This one doesn't fix anything and is not required for the previous fix, so it could be merged later. Now that we've repurposed sys_ppc32.c for the difficult syscalls and compat syscalls live all over the kernel now anyway, IMO it's makes things less confusing to move this. Thanks, Nick arch/powerpc/include/asm/syscalls.h | 23 ++++++++++++----------- arch/powerpc/kernel/sys_ppc32.c | 11 ----------- arch/powerpc/kernel/syscalls.c | 11 +++++++++++ 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/arch/powerpc/include/asm/syscalls.h b/arch/powerpc/include/asm/syscalls.h index a1142496cd58..810ce45d670b 100644 --- a/arch/powerpc/include/asm/syscalls.h +++ b/arch/powerpc/include/asm/syscalls.h @@ -79,8 +79,20 @@ long compat_sys_old_getrlimit(unsigned int resource, struct compat_rlimit __user *rlim); long compat_sys_sigreturn(void); long compat_sys_rt_sigreturn(void); +long compat_sys_ppc_sync_file_range2(int fd, unsigned int flags, + unsigned int offset1, + unsigned int offset2, + unsigned int nbytes1, + unsigned int nbytes2); #endif /* CONFIG_COMPAT */ +#if defined(CONFIG_PPC32) || defined(CONFIG_COMPAT) +long sys_ppc_fadvise64_64(int fd, int advice, + u32 offset_high, u32 offset_low, + u32 len_high, u32 len_low); +#endif + + /* * Architecture specific signatures required by long long munging: * The 32 bit ABI passes long longs in an odd even register pair. @@ -123,19 +135,8 @@ long compat_sys_ppc_ftruncate64(unsigned int fd, u32 reg4, unsigned long len1, unsigned long len2); long compat_sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2, size_t len, int advice); -long compat_sys_ppc_sync_file_range2(int fd, unsigned int flags, - unsigned int offset1, - unsigned int offset2, - unsigned int nbytes1, - unsigned int nbytes2); #endif /* CONFIG_COMPAT */ -#if defined(CONFIG_PPC32) || defined(CONFIG_COMPAT) -long sys_ppc_fadvise64_64(int fd, int advice, - u32 offset_high, u32 offset_low, - u32 len_high, u32 len_low); -#endif - #else #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c index 6bdfe11a7689..53927abcda82 100644 --- a/arch/powerpc/kernel/sys_ppc32.c +++ b/arch/powerpc/kernel/sys_ppc32.c @@ -111,14 +111,3 @@ PPC32_SYSCALL_DEFINE6(ppc32_fadvise64, return ksys_fadvise64_64(fd, merge_64(offset1, offset2), len, advice); } - -COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2, - int, fd, unsigned int, flags, - unsigned int, offset1, unsigned int, offset2, - unsigned int, nbytes1, unsigned int, nbytes2) -{ - loff_t offset = merge_64(offset1, offset2); - loff_t nbytes = merge_64(nbytes1, nbytes2); - - return ksys_sync_file_range(fd, offset, nbytes, flags); -} diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c index 68ebb23a5af4..8bdc41879045 100644 --- a/arch/powerpc/kernel/syscalls.c +++ b/arch/powerpc/kernel/syscalls.c @@ -97,6 +97,17 @@ COMPAT_SYSCALL_DEFINE1(ppc64_personality, unsigned long, personality) { return do_ppc64_personality(personality); } + +COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2, + int, fd, unsigned int, flags, + unsigned int, offset1, unsigned int, offset2, + unsigned int, nbytes1, unsigned int, nbytes2) +{ + loff_t offset = merge_64(offset1, offset2); + loff_t nbytes = merge_64(nbytes1, nbytes2); + + return ksys_sync_file_range(fd, offset, nbytes, flags); +} #endif /* CONFIG_COMPAT */ #endif /* CONFIG_PPC64 */