Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1146332pxj; Tue, 18 May 2021 22:55:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5NZpR+9kkrt9xOAI4wDIGJHigll29/zzGz9P81+SlTHOAjG9xWR1V+NuFqWlBatuxESCY X-Received: by 2002:a02:900b:: with SMTP id w11mr8135968jaf.5.1621403721976; Tue, 18 May 2021 22:55:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621403721; cv=none; d=google.com; s=arc-20160816; b=AIWayG1aVDX6XJz+CzkbRIp+DIJ6BCfEdjfs44rd/S+IYgXok9mDfLn3vnQ1YJyCwd 1ImLryr3w72l+M5LCS0NefSxClnlxicUFJ0J7pOktYx70mPE8U0MDbXG9B7rZO6sYEIf utsK9GcxMVnkcmHIP0YuAVwau1EFgd7cUKiQPwHdRo7GqbROzTdPbHhvHayuZ0qWJLZU ZVAsNMJn+AqZR0tEGKRPpsCpAdfzyiBT9N4msweQR6mpngnaY53ENdpfV3xF0eydHHv/ 3Uf8Z73UnPN8Up8STPXBkX1dmytsZ2ITVoebzjCWNE1yzP2Y31g0BF3nAFVx0d1jlXzE FRkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=yrZZ6HjC2sXusjwyEaw1ab5WRux9vonr+ihAf85Qlxo=; b=S93DgHjihTGw+1Du5SRBjyoDZQmUg00reHVPTgIWS1ad4zsy6lRmbxlICIDIPMPigu sUXqlnHdeNpZ0M1viIPdepNeGvthkGto/WSY43rcVLHMsvARgy+Uqs3TH2QXON0ao9CE VFwcMFsIDHMR2DX4Um0ZR097BWhoiLRygJlQTpNQtr3LrcD9n7MrdMs78G66Pvuhfjb0 WCemSJ33b3NlWZt6FL+Wa5JenJsujWRARIlSkUy24LIAg4Q9/zzm3FO55KFnllrV1nGc L+2txKAK8RrWYZgt4di00DUxlvloNjBoj3AyAUazMM5Gbjo5803vkRec/QSIO9X6JXrI Rkkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=aP84ny8F; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l21si28112241iow.25.2021.05.18.22.55.07; Tue, 18 May 2021 22:55:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=aP84ny8F; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245696AbhEQVye (ORCPT + 99 others); Mon, 17 May 2021 17:54:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:36468 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245697AbhEQVyc (ORCPT ); Mon, 17 May 2021 17:54:32 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4A091610CB; Mon, 17 May 2021 21:53:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1621288395; bh=U9deKdKok+VzFOKlTKX/QNSM6gu2QbQroTH/5xZ/7fQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=aP84ny8Fs/au6FOc58Vbu8tzwXecGsPkJXIznd2YNXehsIGFUzIDud/9eX62S28hT XcBwDm/MTKgFYwXN4XpIRlVr9PCez/oLptRcnWPJyfMB1cwHni+LUs6lfDGY+8IuIj RStmlVeD0jwN2Tmwg3977fVIZjPXm8be2N4pWHHt6DLAF7XmDj2KrZqSdJ1Qr1abK/ WdQ65OqPMXbw9jvdxjlLcAlU2N5ulOt9R6HyODKNsMR8dRU2y7UV7Pbj2sWsQLG7Pk FhyDKPr3JQTro1a4HjiJD/zrYGToQg/ecdSArZN/J1BBsrYYEDrYE9dQb/VBcNviM3 osTbC5axoSHlA== Date: Mon, 17 May 2021 14:53:13 -0700 From: Eric Biggers To: Arnd Bergmann Cc: linux-arch@vger.kernel.org, Linus Torvalds , Vineet Gupta , Arnd Bergmann , Russell King , Herbert Xu , "David S. Miller" , Thomas Bogendoerfer , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org, linux-mips@vger.kernel.org Subject: Re: [PATCH v2 07/13] asm-generic: unaligned always use struct helpers Message-ID: References: <20210514100106.3404011-1-arnd@kernel.org> <20210514100106.3404011-8-arnd@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210514100106.3404011-8-arnd@kernel.org> Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On Fri, May 14, 2021 at 12:00:55PM +0200, Arnd Bergmann wrote: > From: Arnd Bergmann > > As found by Vineet Gupta and Linus Torvalds, gcc has somewhat unexpected > behavior when faced with overlapping unaligned pointers. The kernel's > unaligned/access-ok.h header technically invokes undefined behavior > that happens to usually work on the architectures using it, but if the > compiler optimizes code based on the assumption that undefined behavior > doesn't happen, it can create output that actually causes data corruption. > > A related problem was previously found on 32-bit ARMv7, where most > instructions can be used on unaligned data, but 64-bit ldrd/strd causes > an exception. The workaround was to always use the unaligned/le_struct.h > helper instead of unaligned/access-ok.h, in commit 1cce91dfc8f7 ("ARM: > 8715/1: add a private asm/unaligned.h"). > > The same solution should work on all other architectures as well, so > remove the access-ok.h variant and use the other one unconditionally on > all architectures, picking either the big-endian or little-endian version. FYI, gcc 10 had a bug where it miscompiled code that uses "packed structs" to copy between overlapping unaligned pointers (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94994). I'm not sure whether the kernel will run into that or not, and gcc has since fixed it. But it's worth mentioning, especially since the issue mentioned in this commit sounds very similar (overlapping unaligned pointers), and both involved implementations of DEFLATE decompression. Anyway, partly due to the above, in userspace I now only use memcpy() to implement {get,put}_unaligned_*, since these days it seems to be compiled optimally and have the least amount of problems. I wonder if the kernel should do the same, or whether there are still cases where memcpy() isn't compiled optimally. armv6/7 used to be one such case, but it was fixed in gcc 6. - Eric