From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 78DFBC433DF for ; Wed, 12 Aug 2020 01:36:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 50A3620658 for ; Wed, 12 Aug 2020 01:36:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1597196166; bh=RzUNQOa9yKC8yZBZqnQ+/MoTbQ6IbimoZLt+B3XWWF8=; h=Date:From:To:Subject:In-Reply-To:Reply-To:List-ID:From; b=WDG1uolEqOC1YMVJ97sl3iMofdqKhP/dWyGFlSyjb7rqblvr7LFHlvWGUKweRs+XR i5DtLIIFpyJmEa2F6u3BFuVmGd0poI54sS6jqCJduOhH7Rv/+jUpxFkPvI8uCLi7lF WbuqoVbq8k5yT4c0XaAuapeeDaOTyh23Ppd8fyLY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726473AbgHLBgG (ORCPT ); Tue, 11 Aug 2020 21:36:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:37254 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726143AbgHLBgF (ORCPT ); Tue, 11 Aug 2020 21:36:05 -0400 Received: from localhost.localdomain (c-73-231-172-41.hsd1.ca.comcast.net [73.231.172.41]) (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 44D452054F; Wed, 12 Aug 2020 01:36:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1597196165; bh=RzUNQOa9yKC8yZBZqnQ+/MoTbQ6IbimoZLt+B3XWWF8=; h=Date:From:To:Subject:In-Reply-To:From; b=LHcSwpRVNrN/YdZDTNSsH7tMXP/0wBd19eELpJhZxa9wOwJ6TdW+B2ZisQgmTyaOa mWCAeYm30rtLI5tcw9edXHyfPPqVXx/KPerpdMe4KGsPRfCfwFlvIK7Xq+xv9rQsVF 9VCU21rQnYt5rhfpBQ0svqZvPSEOMlCGEWrFArYI= Date: Tue, 11 Aug 2020 18:36:04 -0700 From: Andrew Morton To: akpm@linux-foundation.org, deller@gmx.de, laurent@vivier.eu, linux-mm@kvack.org, mm-commits@vger.kernel.org, torvalds@linux-foundation.org, viro@zeniv.linux.org.uk Subject: [patch 111/165] fs/signalfd.c: fix inconsistent return codes for signalfd4 Message-ID: <20200812013604.wh3wjni1o%akpm@linux-foundation.org> In-Reply-To: <20200811182949.e12ae9a472e3b5e27e16ad6c@linux-foundation.org> User-Agent: s-nail v14.8.16 Sender: mm-commits-owner@vger.kernel.org Precedence: bulk Reply-To: linux-kernel@vger.kernel.org List-ID: X-Mailing-List: mm-commits@vger.kernel.org From: Helge Deller Subject: fs/signalfd.c: fix inconsistent return codes for signalfd4 The kernel signalfd4() syscall returns different error codes when called either in compat or native mode. This behaviour makes correct emulation in qemu and testing programs like LTP more complicated. Fix the code to always return -in both modes- EFAULT for unaccessible user memory, and EINVAL when called with an invalid signal mask. Link: http://lkml.kernel.org/r/20200530100707.GA10159@ls3530.fritz.box Signed-off-by: Helge Deller Cc: Alexander Viro Cc: Laurent Vivier Signed-off-by: Andrew Morton --- fs/signalfd.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) --- a/fs/signalfd.c~fs-signalfdc-fix-inconsistent-return-codes-for-signalfd4 +++ a/fs/signalfd.c @@ -314,9 +314,10 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sig { sigset_t mask; - if (sizemask != sizeof(sigset_t) || - copy_from_user(&mask, user_mask, sizeof(mask))) + if (sizemask != sizeof(sigset_t)) return -EINVAL; + if (copy_from_user(&mask, user_mask, sizeof(mask))) + return -EFAULT; return do_signalfd4(ufd, &mask, flags); } @@ -325,9 +326,10 @@ SYSCALL_DEFINE3(signalfd, int, ufd, sigs { sigset_t mask; - if (sizemask != sizeof(sigset_t) || - copy_from_user(&mask, user_mask, sizeof(mask))) + if (sizemask != sizeof(sigset_t)) return -EINVAL; + if (copy_from_user(&mask, user_mask, sizeof(mask))) + return -EFAULT; return do_signalfd4(ufd, &mask, 0); } _