From patchwork Mon Apr 15 18:44:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 162249 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3134813oca; Mon, 15 Apr 2019 11:48:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqwkvIWXcdQFXXzESeUix6Kjq5sRV0J9evOsZDDxM2TGlz5Pbsfxfoa9wl48F9+GLNOLtg/g X-Received: by 2002:a65:5089:: with SMTP id r9mr71624012pgp.14.1555354085395; Mon, 15 Apr 2019 11:48:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555354085; cv=none; d=google.com; s=arc-20160816; b=egOZD/KAzm0HSdU1tGYE+iraZwtLTs0xU2J+uKiY5F9O18hC3H5Nb+T020xvxSCqZK zStKCuq7FQ/Vj1TjPgDLAvu7+Lm/fkVcBmOJQ8FUtEchREmc53o3ZQc2agGbEjQ77+P3 m4Cwt0GzcKa1dLvpDKKfzJw4qVFjc+iZD2/HvYpgD5HHPTt5RL71oULwGo9FoWUkj5OV xsxr5Fn3Gvdo5ir5uXTKCYJxQdtkFcXPMGOHBXS+91/PuyFUs568pA4rds0vo2ss4HDY to+fNdjpUyllR15LwYgTku0JA9X10Y8veDcVfhgjN0OW6NbjujmmYsJW8EjK13m5mv83 cz1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=APNhNlKzzcH7d3sLbZ2UygBEhEEKtGAnhUub2e8KNEs=; b=X9CC7M9H5Q5mmLM+9Em2Idis4eUAJWJt27L97yNqYdKjUdeZOz5Xu8ke18TZ9ccbpx 7MrfvxCsTziGqLJ6cOK/bvwVPXrf+Md5fGogyr72F6kV44ODwGhCqe6ipV4Y3ogAFahp A3Mn1s8uj3X0R8m4ls06A6dkBfUI+rwSGR8wve6hY2+3ASGjtqq8vZEbAcrCO9+HuvNa gzH/g86SXTt3YFKndwJKlXZ7c9o07wlBhJvst1nP9T948+P5IAFUY4t/9NAaozaWLDMH gIxrRF/IO3CUjTamEbfwyDeE1egzkako5AyxjRXKaHeZ47HYj5xG5BFiweXcXpKksHG9 VZ3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=AfJJwlH6; 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 l191si33510246pfc.213.2019.04.15.11.48.05; Mon, 15 Apr 2019 11:48:05 -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; dkim=pass header.i=@kernel.org header.s=default header.b=AfJJwlH6; 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 S1729049AbfDOSsE (ORCPT + 30 others); Mon, 15 Apr 2019 14:48:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:51706 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729030AbfDOSsB (ORCPT ); Mon, 15 Apr 2019 14:48:01 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 52CFD218A1; Mon, 15 Apr 2019 18:47:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1555354079; bh=ds/UlyRIcrWH7VpnA/tayigqJ7lXO+usDH9robgy0fE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AfJJwlH6EB0P9h1JByiuM/3Z9gkqMG/lLkRW0SQOcwhK2TxplUPszOoQyOVNdecvH 7LU4URQppT3OCsEbLG00mN7pyoSHgeywwFuiJz/aBr/BoE2Bfmk1+7pW3DmZfvIp7j GvvUcPpz76yl/4jtpTvI2Rl18hOWx//9CyYNzORw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Arnd Bergmann , Nick Desaulniers , Zhao Qiang , Yalin Wang , Andrew Morton , Linus Torvalds Subject: [PATCH 4.9 65/76] include/linux/bitrev.h: fix constant bitrev Date: Mon, 15 Apr 2019 20:44:29 +0200 Message-Id: <20190415183726.657925107@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415183707.712011689@linuxfoundation.org> References: <20190415183707.712011689@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnd Bergmann commit 6147e136ff5071609b54f18982dea87706288e21 upstream. clang points out with hundreds of warnings that the bitrev macros have a problem with constant input: drivers/hwmon/sht15.c:187:11: error: variable '__x' is uninitialized when used within its own initialization [-Werror,-Wuninitialized] u8 crc = bitrev8(data->val_status & 0x0F); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/bitrev.h:102:21: note: expanded from macro 'bitrev8' __constant_bitrev8(__x) : \ ~~~~~~~~~~~~~~~~~~~^~~~ include/linux/bitrev.h:67:11: note: expanded from macro '__constant_bitrev8' u8 __x = x; \ ~~~ ^ Both the bitrev and the __constant_bitrev macros use an internal variable named __x, which goes horribly wrong when passing one to the other. The obvious fix is to rename one of the variables, so this adds an extra '_'. It seems we got away with this because - there are only a few drivers using bitrev macros - usually there are no constant arguments to those - when they are constant, they tend to be either 0 or (unsigned)-1 (drivers/isdn/i4l/isdnhdlc.o, drivers/iio/amplifiers/ad8366.c) and give the correct result by pure chance. In fact, the only driver that I could find that gets different results with this is drivers/net/wan/slic_ds26522.c, which in turn is a driver for fairly rare hardware (adding the maintainer to Cc for testing). Link: http://lkml.kernel.org/r/20190322140503.123580-1-arnd@arndb.de Fixes: 556d2f055bf6 ("ARM: 8187/1: add CONFIG_HAVE_ARCH_BITREVERSE to support rbit instruction") Signed-off-by: Arnd Bergmann Reviewed-by: Nick Desaulniers Cc: Zhao Qiang Cc: Yalin Wang Cc: Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- include/linux/bitrev.h | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) --- a/include/linux/bitrev.h +++ b/include/linux/bitrev.h @@ -31,32 +31,32 @@ static inline u32 __bitrev32(u32 x) #define __constant_bitrev32(x) \ ({ \ - u32 __x = x; \ - __x = (__x >> 16) | (__x << 16); \ - __x = ((__x & (u32)0xFF00FF00UL) >> 8) | ((__x & (u32)0x00FF00FFUL) << 8); \ - __x = ((__x & (u32)0xF0F0F0F0UL) >> 4) | ((__x & (u32)0x0F0F0F0FUL) << 4); \ - __x = ((__x & (u32)0xCCCCCCCCUL) >> 2) | ((__x & (u32)0x33333333UL) << 2); \ - __x = ((__x & (u32)0xAAAAAAAAUL) >> 1) | ((__x & (u32)0x55555555UL) << 1); \ - __x; \ + u32 ___x = x; \ + ___x = (___x >> 16) | (___x << 16); \ + ___x = ((___x & (u32)0xFF00FF00UL) >> 8) | ((___x & (u32)0x00FF00FFUL) << 8); \ + ___x = ((___x & (u32)0xF0F0F0F0UL) >> 4) | ((___x & (u32)0x0F0F0F0FUL) << 4); \ + ___x = ((___x & (u32)0xCCCCCCCCUL) >> 2) | ((___x & (u32)0x33333333UL) << 2); \ + ___x = ((___x & (u32)0xAAAAAAAAUL) >> 1) | ((___x & (u32)0x55555555UL) << 1); \ + ___x; \ }) #define __constant_bitrev16(x) \ ({ \ - u16 __x = x; \ - __x = (__x >> 8) | (__x << 8); \ - __x = ((__x & (u16)0xF0F0U) >> 4) | ((__x & (u16)0x0F0FU) << 4); \ - __x = ((__x & (u16)0xCCCCU) >> 2) | ((__x & (u16)0x3333U) << 2); \ - __x = ((__x & (u16)0xAAAAU) >> 1) | ((__x & (u16)0x5555U) << 1); \ - __x; \ + u16 ___x = x; \ + ___x = (___x >> 8) | (___x << 8); \ + ___x = ((___x & (u16)0xF0F0U) >> 4) | ((___x & (u16)0x0F0FU) << 4); \ + ___x = ((___x & (u16)0xCCCCU) >> 2) | ((___x & (u16)0x3333U) << 2); \ + ___x = ((___x & (u16)0xAAAAU) >> 1) | ((___x & (u16)0x5555U) << 1); \ + ___x; \ }) #define __constant_bitrev8(x) \ ({ \ - u8 __x = x; \ - __x = (__x >> 4) | (__x << 4); \ - __x = ((__x & (u8)0xCCU) >> 2) | ((__x & (u8)0x33U) << 2); \ - __x = ((__x & (u8)0xAAU) >> 1) | ((__x & (u8)0x55U) << 1); \ - __x; \ + u8 ___x = x; \ + ___x = (___x >> 4) | (___x << 4); \ + ___x = ((___x & (u8)0xCCU) >> 2) | ((___x & (u8)0x33U) << 2); \ + ___x = ((___x & (u8)0xAAU) >> 1) | ((___x & (u8)0x55U) << 1); \ + ___x; \ }) #define bitrev32(x) \ From patchwork Mon Apr 15 18:44:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 162248 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3134502oca; Mon, 15 Apr 2019 11:47:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqxB90FhgZ5jZfBLWNdG5t3uc9SM80GeInYnF8lJivXX9GM80GFjgTqZRcceKq9y1Ja0KlqV X-Received: by 2002:aa7:9ab1:: with SMTP id x17mr71695126pfi.4.1555354067220; Mon, 15 Apr 2019 11:47:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555354067; cv=none; d=google.com; s=arc-20160816; b=Y1FaQ1RfddWwr4sRaefkPZnECFUbPOV+XQDDRvMTLPGS7fV2AH0OZZL5mQVfDUxF1w k+om+vicoHZq4HBE7cSh7h2++OTk4jWRE91/+kaTHgPe2alDtM4JVqu77XHLilP42Qez /s/t17AAtV2/h4cCjnCOP8cHyHPDNsvUUoxqwPb3mNzsNGQT6Om5WOl9/p1fzu8+POec /UoVDd4qXWAAjEfWraucv4G3+stYduYyBjvDFOBywYsZfQvLf7/5EAgwOpjsP1rSBVXs YDVlZfnVkrvqCbNbMqgDS8hpwPoaxCYdzig6GyAaU67DwwJQ+0U5vsXCtMA9PhEZESDi EFLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=7nKvlDugaqvoidz2yFtFjv2wR9m+XTyMsUX89pnJ/Cs=; b=KrlPlV7ei9BL6APnmWFAsVSe3BvksUZJIwc63ytJ2G5o0+9qPF+FHGHPkRcET3w2Su vTT4ogcEYnmnccZ0tk1WIIYQYqcUopbQ+1SY/F9wZ7S60ntoBeV5wxfo57RTzlO0/z3w 2HUdaFpMm8gCHxlbDX07tG/njyd4u+pIo/BB1lvDql96ak5F5bhrm8YlQ+dhlpQDEUHW 70cxKraN9FYsELX/CIWxhuFf74SOh/wiTuFf1YsY1IlprB2u4gkPYyX09nP+MBSugHdI 63CVGmk4IG5IHAuWQQEj+Wke3bNO/U+ibB7gnp54dpkr23nIi94fn8L29d1/XsPMaTXb WowA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NFJvyKuw; 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 t17si46461359pfe.250.2019.04.15.11.47.46; Mon, 15 Apr 2019 11:47:47 -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; dkim=pass header.i=@kernel.org header.s=default header.b=NFJvyKuw; 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 S1728982AbfDOSrp (ORCPT + 30 others); Mon, 15 Apr 2019 14:47:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:51222 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728970AbfDOSrm (ORCPT ); Mon, 15 Apr 2019 14:47:42 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 D04B7218A1; Mon, 15 Apr 2019 18:47:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1555354061; bh=N9twaE/aihUssVkD9XCQhCPlj77mh0Cs/sQFS3r59Mg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NFJvyKuw/PBlRjNhbMH+WxXIA9qrqJ0WI5pzvXRgEDXPg00jSD7PkfC8BhMR1f9F3 XEKCyIUqZ/CI66Y26G0K5iyVfEmEj6jD5kFqkjMAkVyG42u8xsrOHK5s0nmiXZ/FK6 /w7acyPFldu2DGaK83Kkwck1E3km+8T8ly8Oovtg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, stable@kernel.org, Will Deacon Subject: [PATCH 4.9 72/76] arm64: futex: Fix FUTEX_WAKE_OP atomic ops with non-zero result value Date: Mon, 15 Apr 2019 20:44:36 +0200 Message-Id: <20190415183729.170980546@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415183707.712011689@linuxfoundation.org> References: <20190415183707.712011689@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Will Deacon commit 045afc24124d80c6998d9c770844c67912083506 upstream. Rather embarrassingly, our futex() FUTEX_WAKE_OP implementation doesn't explicitly set the return value on the non-faulting path and instead leaves it holding the result of the underlying atomic operation. This means that any FUTEX_WAKE_OP atomic operation which computes a non-zero value will be reported as having failed. Regrettably, I wrote the buggy code back in 2011 and it was upstreamed as part of the initial arm64 support in 2012. The reasons we appear to get away with this are: 1. FUTEX_WAKE_OP is rarely used and therefore doesn't appear to get exercised by futex() test applications 2. If the result of the atomic operation is zero, the system call behaves correctly 3. Prior to version 2.25, the only operation used by GLIBC set the futex to zero, and therefore worked as expected. From 2.25 onwards, FUTEX_WAKE_OP is not used by GLIBC at all. Fix the implementation by ensuring that the return value is either 0 to indicate that the atomic operation completed successfully, or -EFAULT if we encountered a fault when accessing the user mapping. Cc: Fixes: 6170a97460db ("arm64: Atomic operations") Signed-off-by: Will Deacon Signed-off-by: Greg Kroah-Hartman --- arch/arm64/include/asm/futex.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) --- a/arch/arm64/include/asm/futex.h +++ b/arch/arm64/include/asm/futex.h @@ -33,8 +33,8 @@ " prfm pstl1strm, %2\n" \ "1: ldxr %w1, %2\n" \ insn "\n" \ -"2: stlxr %w3, %w0, %2\n" \ -" cbnz %w3, 1b\n" \ +"2: stlxr %w0, %w3, %2\n" \ +" cbnz %w0, 1b\n" \ " dmb ish\n" \ "3:\n" \ " .pushsection .fixup,\"ax\"\n" \ @@ -53,29 +53,29 @@ static inline int arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr) { - int oldval = 0, ret, tmp; + int oldval, ret, tmp; pagefault_disable(); switch (op) { case FUTEX_OP_SET: - __futex_atomic_op("mov %w0, %w4", + __futex_atomic_op("mov %w3, %w4", ret, oldval, uaddr, tmp, oparg); break; case FUTEX_OP_ADD: - __futex_atomic_op("add %w0, %w1, %w4", + __futex_atomic_op("add %w3, %w1, %w4", ret, oldval, uaddr, tmp, oparg); break; case FUTEX_OP_OR: - __futex_atomic_op("orr %w0, %w1, %w4", + __futex_atomic_op("orr %w3, %w1, %w4", ret, oldval, uaddr, tmp, oparg); break; case FUTEX_OP_ANDN: - __futex_atomic_op("and %w0, %w1, %w4", + __futex_atomic_op("and %w3, %w1, %w4", ret, oldval, uaddr, tmp, ~oparg); break; case FUTEX_OP_XOR: - __futex_atomic_op("eor %w0, %w1, %w4", + __futex_atomic_op("eor %w3, %w1, %w4", ret, oldval, uaddr, tmp, oparg); break; default: