From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751714AbcF0Fje (ORCPT ); Mon, 27 Jun 2016 01:39:34 -0400 Received: from mail-bn1bon0079.outbound.protection.outlook.com ([157.56.111.79]:7728 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750909AbcF0Fjc (ORCPT ); Mon, 27 Jun 2016 01:39:32 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Date: Mon, 27 Jun 2016 08:39:16 +0300 From: Yury Norov To: zhouchengming CC: , , , , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH] ilp32: fix {GET,SET}SIGMASK request for ptrace Message-ID: <20160627053916.GA305@yury-N73SV> References: <1466207668-10549-1-git-send-email-ynorov@caviumnetworks.com> <1466207668-10549-13-git-send-email-ynorov@caviumnetworks.com> <5770B041.3040509@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <5770B041.3040509@huawei.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: VI1PR06CA0015.eurprd06.prod.outlook.com (10.162.116.153) To DM3PR07MB2249.namprd07.prod.outlook.com (10.164.33.147) X-MS-Office365-Filtering-Correlation-Id: 6716dce9-8849-43f0-5262-08d39e4d67f2 X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;2:bXC1sMcWXglI+oGwt7OfHAsbPbrBJaPsjJbPhy6udM9PrGonJc/ObJI/4HlGPqs1HiXuZnrvb2usSfyhJu8USO3X1nd7BmwpUk/B8ZlaHiX2zI6iNzD6QAoRcnucTn2ZB0vkT+cgpkZ0hEScUHCD2P311ViIgQ0Jn8Q8KjWXV1icNV/UzWrgwR/fH/8NYzvr;3:nxuy7Ht8EpjlwJ29KK8CHDsJDZsCykdaXrnP0zpx16mihqW8PnYBeWd/1MQq5nmeb+iTJNJ402mSQ2QT3gDO/ivmHUNP8tknALwQvQMUH1OjfrXjddvIg/WmPa1YAxL1;25:KcEPcamqjsO7MHplSujnSBLQHuBHnwTkyk/SoBNcgmyxeH51kNRK9tAWVtd9NKETTttFsBIbfgBzwE9vZw2NiKj9YJbBYig9Eo2MQO8c43+F3s67nenAHk3FXMGCfpWGCTYC+84oVLOHR4KgdzcU4Kti6yv6DhDE6JYzzZzO6bg8CvNkV3KXoAVryrmhYOarUnIc9UdCCw7n77SQkGimOVLQPXDUS8uJTX9ebs1Qk9x748/Od/bTLhzXUZFqZLmG2EmcNsAJaMFbRyOIow4qZfbMuGEhPygiwhWAAa7z/eKcVowy68M+jh0oQIlE1McEqvl8Cw/viEW7gmvURixlxa+Kye0QYAdm6oHcqh98i7F4Umq9DCB9papyz7ddvUsB587QFLDEWuiGKr2T2vhx19LUmau9Z4bbT5ssWSCKSwI= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2249; X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;20:92iKoK3dcuxxAzTf+v1Uia3WjKRbyfV6o1HJ41Pm6lr0FjMWw1nbehEEe8esGi4sXPk+nlIZAXoNcyND9ZIkdLqAxiqTJDYTPC+6LE27ZYQ0+Amj4aI02nL6jUKUAg91Nhbw/VzLtyHK7GJhXlzWN1y8Hy+22nN5xO29Ff5jjY8E2+xqd7cSpdpGAMZD5MzZ3mtC2lsPNEtwj55UzGNvtNW2yLlQyv5og+v0wqI0DnMdz5XeWUz6xVD8+2LA6sa1Q4Pf74Aj3E+0CXZV7Cy9rpRNNRuutkpfZphs3QVjE9ozu9WEGMNAj/JGZ5F9xMdcPOUZxTe8nTc4HKJkCvyJxsYT0oSMxolHNrOQlCuGKdNvAfKPmIFATsLlFzBgVDtS6Fp2EmZJaB2JAyFeifFXKqjmkvJTSZ+f4k322rDeBWc6DVAlgWX2nl3RI/pBtb/lr4UGSnnDcb1yIb6dsLl6IxqJ9dz7em1MYABaE9aUQZiSX/0vclBFyYbrt2ypsN93LULz+wGcqZW7RLyILvuurELAikx4lHv5F0JlUx1Sy3kUE+FUzGEbMyerJJR9F0YqwkaxA/GoaZ0SnYkV0icvQzWWkCyXCxSofg5HwnXXwB8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(50582790962513); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046);SRVR:DM3PR07MB2249;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2249; X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;4:FScZW7gGlRIgiepxtQheH5uKlWVKSgEztnRNLts+RxYZBdjeLU6seCdGMzuQ0iCva2612cmkPb7ZBcr47wKblcEgB8MvMdivYXAf98Z+TjjFyeKXdOdTxZr8Ve/3pMhNJwhhwimZXeUtPcQ7m+bBkWKuzif4+4Jl/bZ+W34B89efdDKLNF8Tga6vJ+dXnlgJ+pjuh7Kwg3hMAJvw9BFhsXoD/EDCfHzNYm/ZBwBKmxPV3c2xuhFljifThwS/mWok/pfemZfJhe4qW7c62gOa5gouQ57AkRYSvML5TSX3kYsNjqSjNi2hj4Ke5PlKvaoZT2Ju+i0WFagtyeDzR1csHYlhyhKqRaXacPrTGfMjO8f1MaKFoZD2WcgUWiSdphr1gFgSiqNHy9MvIixTbkbrYARFqnZLQUidyD9mMsWRrgE= X-Forefront-PRVS: 09860C2161 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(24454002)(199003)(189002)(33716001)(42186005)(92566002)(46406003)(50986999)(54356999)(76176999)(77096005)(2950100001)(97756001)(101416001)(76506005)(33656002)(8676002)(50466002)(97736004)(4001350100001)(81156014)(81166006)(345774005)(7846002)(305945005)(7736002)(9686002)(1076002)(66066001)(68736007)(47776003)(6116002)(23726003)(19580405001)(110136002)(19580395003)(105586002)(3846002)(586003)(83506001)(4326007)(189998001)(2906002)(106356001)(142933001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR07MB2249;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR07MB2249;23:goLJOzr/IkyFjzEa4lDicf3HY6HJamZM9tvxrFAcW?= =?us-ascii?Q?y0MLO9dIb9VV3H7wiupkob9I4dUVCDPQWh0NOBBhhdWtdbhwA9hvdycqGCaP?= =?us-ascii?Q?cWRHty98ECZ9sxmGS5R7uQLYReE6K4fXbKpb8XvmeKjTUG1l0rYAAvez8ZlG?= =?us-ascii?Q?Tol3eVVrB9ZKGcAH3MJKct5/3XDkLBVgEIVHk2C2Nbrx3UJKP8B+/jA9Tltp?= =?us-ascii?Q?X/2D0L8SrfWpDOCzBfa9Z+XnONxTUICEyX8uoiiXkNGrA8lADRYAE0ZCo+0F?= =?us-ascii?Q?pdMiIZEClCAnCNp63nHjs4y87gdsFKTT0zL3rVzr6TUWHL6A0zuUfQnlNF84?= =?us-ascii?Q?IBbM0dK0h95t/BrP8TA8M0NysCEwaq3l2gMHo8xT9025RhkuG17wAFWnsQjk?= =?us-ascii?Q?Vtwgy5LMgreVGzo8gRe2maDoKcDG2Dz8EN5fWz6W8X5dsZtyvuBmuzfjG78d?= =?us-ascii?Q?BKCDPkOOQdPz+bqli7nqyiBR6PAHNezlMuo+8prf6jJHKzmEjqS30RLYtWtA?= =?us-ascii?Q?h2UgUhiLBl68N3X27D9bNXEshkfTI5+3hijjX8nj1NhyO2sq6qXRkgsi0K7h?= =?us-ascii?Q?oQ4E3qMr4UnROEn0emDVsQgu0KOersaSW2knkjHvFDRCyXP+1nwRtGvRx3I+?= =?us-ascii?Q?Hma4KULMR9uEQeNjVPvo6HgG+1pIAWchIyoM7poM0BaUMpW9f4bmm9ImiLLW?= =?us-ascii?Q?XNT4CpEFxakwXRDdydE21asBCGDi8chp3z1naIkCXC2+Ercu/2HY/MLPXHQ0?= =?us-ascii?Q?/dMOjqYL3q/ilPSP9dcOxc9T5e0f557E4zt60kK17OE7Y5nde/2v0cLCXGPL?= =?us-ascii?Q?uLYVi7+jWdoveLeT8UvCjqLsck2POEhPP02w6lUenL6+QpdF4a0vDWaxEh5X?= =?us-ascii?Q?8cYsikukjiCl1RAT+DWoiygyuHM/S8x9BN7KCXVft3qCJIHK4WVwAij9MNh6?= =?us-ascii?Q?CaJSVekuldxzaArH+zjmzvyUcU+rYZSmK8akdi0DEraGOkjPCV/HGAjEw0Oz?= =?us-ascii?Q?AoHpaMo6Px/z9Vm+kpGQw8IRJ+eNYED6DSOv8viBdnNYpmfpbPZVzkrlf3cX?= =?us-ascii?Q?SFvC/K2oguT7McWALFo/DMoD7C9M69YDVBA/rvRc7U3mWcVGrxAk6jgNuk/4?= =?us-ascii?Q?RMGoNqaFo2DDGnxZc9wDHIWlOCZ25N7O9jdBEObD+uKU/NYkCDpqc0JsemTR?= =?us-ascii?Q?hHDvGGxdPmy43F4CT7nqNmymjpwGbN5J4s1?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;6:sjwLRoo5QbLrwhNlizql+1tk3daD+4/VH54Ak5f9peHJXVMz4VS3XE0mKAKlBCcoxNDQLCKnaRp7FYWuvYKghQnONJbT3i51d48FFfZ7gtx9sXm845Sf1y/+xEAmkFDk0tWSmsA8cKk1K7OFu94lv3YOCPmaD6rg8jUplrmvKCX4l1RC9GERvU09WrGPYO4NbYg7+u2VO+ajnTiB2fJvaNaz0B1t8RTOU9HOmssuSN7qXHekLgD2w+xtE9g3HBG2sPvwpScjGRA9mEc/wPsoIykLaj02nQMXtxu0xH49mDayowbMfwmryDbu37X0gfcl;5:IxwgOfRa4jPVV5pWkcN2zPNDRK4RJF+jJpwIG7qtnfRGUHXC0eLYX7YpO4+S7/MF8P1ELBXdRZJY07Ijt8CFsCCW0FGuXJBEG5EF1KqZmpPwqx2xXeXeaBkUjclaYeGna6vG//vcuaHhsKKnYYXFHg==;24:jqHil4p7vLQIztecbAE5Y7I1QKscPMVI8rY7vXkB8Hxic0KRpK3ahO+JRmH3D409IabdkRYmc25gl4t10zCpCSzFP4g28eaDrbhaE2Q/clI=;7:AmzSKcyEq2sAMvz6ZRvssJKb5W0prg3b4BghocpBu5OecNtAeW767IscrU2SDGSF6wFFO4UpbuFguyGs/SevANvhP3Ed6GQoeIbI4Lm+Q30wJPtvbzepS++dBS0iTBDJY0jQ2rBauhz+R7hdS3TAtg60tjOax3xr8hN/H65MMPcPr6N5vUhbRY1qk+jgD/G7DsoFVr3j5uwDj7S0dMpBYE3icMHzYh/5yijk8DekbWWvXTUNToflETXjR/nzxm1oAn1dmR/87Ui/C+oNyZtXaQ== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2016 05:39:27.8752 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR07MB2249 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Zhou, Thank you for the patch. The idea is ok, but patch format got broken for some reason. Could you re-send it? Yury. On Mon, Jun 27, 2016 at 12:49:05PM +0800, zhouchengming wrote: > atus: RO > Content-Length: 4732 > Lines: 181 > > The function compat_ptrace_request(used by ilp32) don't handle > {GET,SET}SIGMASK request, so it will be handled by ptrace_request. > But it's wrong because the compat_sigset_t of ilp32 differs from > the sigset_t of aarch64. The patch fixes it. > > Signed-off-by: Zhou Chengming > --- > arch/arm64/include/asm/signal_ilp32.h | 22 ++++++++++++ > arch/arm64/kernel/ptrace.c | 62 > +++++++++++++++++++++++++++++++++ Here - unneeded line break > arch/arm64/kernel/signal_ilp32.c | 23 +------------ > 3 files changed, 85 insertions(+), 22 deletions(-) > > diff --git a/arch/arm64/include/asm/signal_ilp32.h > b/arch/arm64/include/asm/signal_ilp32.h and here > index 30eff23..ed52607 100644 > --- a/arch/arm64/include/asm/signal_ilp32.h > +++ b/arch/arm64/include/asm/signal_ilp32.h > @@ -21,6 +21,28 @@ > int ilp32_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set, > struct pt_regs *regs); > > +static inline int put_sigset_t(compat_sigset_t __user *uset, sigset_t *set) > +{ > + compat_sigset_t cset; > + > + cset.sig[0] = set->sig[0] & 0xffffffffull; > + cset.sig[1] = set->sig[0] >> 32; > + > + return copy_to_user(uset, &cset, sizeof(*uset)); > +} > + > +static inline int get_sigset_t(sigset_t *set, > + const compat_sigset_t __user *uset) > +{ > + compat_sigset_t s32; > + > + if (copy_from_user(&s32, uset, sizeof(*uset))) > + return -EFAULT; > + > + set->sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32); > + return 0; > +} > + > #else > > static inline int ilp32_setup_rt_frame(int usig, struct ksignal *ksig, > sigset_t *set, and here > diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c > index a861105..8d4cad1 100644 > --- a/arch/arm64/kernel/ptrace.c > +++ b/arch/arm64/kernel/ptrace.c > @@ -44,6 +44,7 @@ > #include > #include > #include > +#include > > #define CREATE_TRACE_POINTS > #include > @@ -1231,12 +1232,73 @@ COMPAT_SYSCALL_DEFINE4(aarch32_ptrace, > compat_long_t, request, compat_long_t, pi and later on the patch > > #endif /* CONFIG_AARCH32_EL0 */ > > +#ifdef CONFIG_ARM64_ILP32 > + > +static int compat_ilp32_ptrace(struct task_struct *child, compat_long_t > request, > + compat_ulong_t addr, compat_ulong_t data) > +{ > + compat_ulong_t __user *datap = compat_ptr(data); > + int ret; > + > + switch (request) { > + case PTRACE_GETSIGMASK: > + if (addr != sizeof(compat_sigset_t)) { > + ret = -EINVAL; > + break; > + } > + > + if (put_sigset_t((compat_sigset_t __user *)datap, &child->blocked)) > + ret = -EFAULT; > + else > + ret = 0; > + break; > + > + case PTRACE_SETSIGMASK: { > + sigset_t new_set; > + if (addr != sizeof(compat_sigset_t)) { > + ret = -EINVAL; > + break; > + } > + > + if (get_sigset_t(&new_set, (compat_sigset_t __user *)datap)) { > + ret = -EFAULT; > + break; > + } > + > + sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP)); > + > + /* > + * Every thread does recalc_sigpending() after resume, so > + * retarget_shared_pending() and recalc_sigpending() are not > + * called here. > + */ > + spin_lock_irq(&child->sighand->siglock); > + child->blocked = new_set; > + spin_unlock_irq(&child->sighand->siglock); > + > + ret = 0; > + break; > + } > + > + default: > + ret = compat_ptrace_request(child, request, addr, data); > + } > + > + return ret; > +} > + > +#endif /* CONFIG_ARM64_ILP32 */ > + > #ifdef CONFIG_COMPAT > > long compat_arch_ptrace(struct task_struct *child, compat_long_t request, > compat_ulong_t caddr, compat_ulong_t cdata) > { > +#ifdef CONFIG_ARM64_ILP32 > + return compat_ilp32_ptrace(child, request, caddr, cdata); > +#else > return compat_ptrace_request(child, request, caddr, cdata); > +#endif > } > > #endif /* CONFIG_COMPAT */ > diff --git a/arch/arm64/kernel/signal_ilp32.c > b/arch/arm64/kernel/signal_ilp32.c > index 8ca64b9..3ef2749 100644 > --- a/arch/arm64/kernel/signal_ilp32.c > +++ b/arch/arm64/kernel/signal_ilp32.c > @@ -28,6 +28,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -58,28 +59,6 @@ struct ilp32_rt_sigframe { > struct ilp32_sigframe sig; > }; > > -static inline int put_sigset_t(compat_sigset_t __user *uset, sigset_t *set) > -{ > - compat_sigset_t cset; > - > - cset.sig[0] = set->sig[0] & 0xffffffffull; > - cset.sig[1] = set->sig[0] >> 32; > - > - return copy_to_user(uset, &cset, sizeof(*uset)); > -} > - > -static inline int get_sigset_t(sigset_t *set, > - const compat_sigset_t __user *uset) > -{ > - compat_sigset_t s32; > - > - if (copy_from_user(&s32, uset, sizeof(*uset))) > - return -EFAULT; > - > - set->sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32); > - return 0; > -} > - > static int restore_ilp32_sigframe(struct pt_regs *regs, > struct