From patchwork Tue Nov 8 18:39:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kyle Huey X-Patchwork-Id: 9417901 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 107CB60720 for ; Tue, 8 Nov 2016 18:41:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 029FB28801 for ; Tue, 8 Nov 2016 18:41:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E9D4328884; Tue, 8 Nov 2016 18:41:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B04328870 for ; Tue, 8 Nov 2016 18:41:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754304AbcKHSkh (ORCPT ); Tue, 8 Nov 2016 13:40:37 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:33003 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753940AbcKHSkc (ORCPT ); Tue, 8 Nov 2016 13:40:32 -0500 Received: by mail-pf0-f195.google.com with SMTP id 144so12086419pfv.0 for ; Tue, 08 Nov 2016 10:40:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kylehuey.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=i9shIF9B1DqIZab7tJ2Kn6GXku04l/NDjzEEzA0pq5E=; b=BcSmnmflX81vLVyX5T7y0130bXWpkqg2aseRufMvlpuahTaqy4JtGR4G5vhl1k82Du 8eTSnvLsXGssIsBP5Ea6iiHnqdUukxeOUb630jWMf0pT544pIqE/kGqsGWfhce7ZB3vx sHJmpy5c9vTbdhfmvNGsw1+U89poJZyLfMMC/BeK9fi+ipkphLEs3JoxrtLDActT4tJo dMHOTDmXjpnToca9j9IexworvF87WUoLal3qTDbaWX9aCHShADeQOA3+bgTCYeZ92s7d uDhbgI3M11xfl3BvVPsdqOZZQVLuM6MutW4/Ifmc/ZgYyxkGR12w7JFxt0mQ4pXWn7OP fQRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=i9shIF9B1DqIZab7tJ2Kn6GXku04l/NDjzEEzA0pq5E=; b=XpQlYttDLKkoiG2V2eA9bQQtJ5dt+rkP3df5ixzg8RBv+2xSj0fuzTTZc2oHZpqM/B T+XeTC5ufc88WT3VuAsYssXMaEqmvoqY0mXwTqgsxk9G12jtL8ILuq/CNtLQ1nCNzaeY 0qpAcd16rnI5tPcxkMauxFA4Cp3OlojfrLLIN+qNgLw9QLqA8qFqHiQ7ay+6cgc0SkxZ 2l8mMhFWwm6rm+YZme+0oFtVcbpip7ufvqHPu5xu8/5J4GMdSZ8nMYt3WEcvJEGynME8 CAAOSNc1HAUFR8BFyUV1LtgtTBxVYLHpPDe1bEG0GQhJHMcwhcsZMON/oa6qEjXe+ow9 GMlA== X-Gm-Message-State: ABUngvdHEjxiBBgmGK4RgUi28PXm2PHGTHo8qzBZqBgThkfbLU4ZwA35bJiPKy2WGpzapg== X-Received: by 10.98.77.1 with SMTP id a1mr25803545pfb.160.1478630409533; Tue, 08 Nov 2016 10:40:09 -0800 (PST) Received: from minbar.hsd1.ca.comcast.net (c-73-162-102-141.hsd1.ca.comcast.net. [73.162.102.141]) by smtp.gmail.com with ESMTPSA id a7sm49773845pfl.87.2016.11.08.10.40.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 08 Nov 2016 10:40:09 -0800 (PST) From: Kyle Huey X-Google-Original-From: Kyle Huey To: Robert O'Callahan , Thomas Gleixner , Andy Lutomirski , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jeff Dike , Richard Weinberger , Alexander Viro , Shuah Khan , Dave Hansen , Borislav Petkov , Peter Zijlstra , Boris Ostrovsky , Len Brown , "Rafael J. Wysocki" , Dmitry Safonov , David Matlack Cc: linux-kernel@vger.kernel.org, user-mode-linux-devel@lists.sourceforge.net, user-mode-linux-user@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, linux-kselftest@vger.kernel.org, kvm@vger.kernel.org Subject: [PATCH v10 3/7] x86/arch_prctl: Add do_arch_prctl_common Date: Tue, 8 Nov 2016 10:39:52 -0800 Message-Id: <20161108183956.4521-4-khuey@kylehuey.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161108183956.4521-1-khuey@kylehuey.com> References: <20161108183956.4521-1-khuey@kylehuey.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add do_arch_prctl_common to handle arch_prctls that are not specific to 64 bits. Call it from the syscall entry point, but not any of the other callsites in the kernel, which all want one of the existing 64 bit only arch_prctls. Signed-off-by: Kyle Huey --- arch/x86/include/asm/proto.h | 1 + arch/x86/kernel/process.c | 5 +++++ arch/x86/kernel/process_64.c | 8 +++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/proto.h b/arch/x86/include/asm/proto.h index 95c3e51..f72b551 100644 --- a/arch/x86/include/asm/proto.h +++ b/arch/x86/include/asm/proto.h @@ -25,13 +25,14 @@ void entry_SYSCALL_compat(void); void entry_INT80_compat(void); #endif void x86_configure_nx(void); void x86_report_nx(void); extern int reboot_force; +long do_arch_prctl_common(struct task_struct *task, int code, unsigned long arg2); #ifdef CONFIG_X86_64 long do_arch_prctl_64(struct task_struct *task, int code, unsigned long arg2); #endif #endif /* _ASM_X86_PROTO_H */ diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 0888a87..d0126b2 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -579,8 +579,13 @@ unsigned long get_wchan(struct task_struct *p) } fp = READ_ONCE_NOCHECK(*(unsigned long *)fp); } while (count++ < 16 && p->state != TASK_RUNNING); out: put_task_stack(p); return ret; } + +long do_arch_prctl_common(struct task_struct *task, int code, unsigned long arg2) +{ + return -EINVAL; +} diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 611df20..bf75d26 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -612,15 +612,21 @@ long do_arch_prctl_64(struct task_struct *task, int code, unsigned long arg2) break; } return ret; } SYSCALL_DEFINE2(arch_prctl, int, code, unsigned long, arg2) { - return do_arch_prctl_64(current, code, arg2); + long ret; + + ret = do_arch_prctl_64(current, code, arg2); + if (ret == -EINVAL) + ret = do_arch_prctl_common(current, code, arg2); + + return ret; } unsigned long KSTK_ESP(struct task_struct *task) { return task_pt_regs(task)->sp; }