From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753616AbcHPNRD (ORCPT ); Tue, 16 Aug 2016 09:17:03 -0400 Received: from smtprelay.synopsys.com ([198.182.60.111]:57623 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753256AbcHPNPh (ORCPT ); Tue, 16 Aug 2016 09:15:37 -0400 From: Alexey Brodkin To: "liavr@mellanox.com" CC: "linux-kernel@vger.kernel.org" , "eladkan@mellanox.com" , "noamca@mellanox.com" , Vineet Gupta , "linux-snps-arc@lists.infradead.org" Subject: Re: [PATCH] ARC: Change ld.as instruction to regular ld. Thread-Topic: [PATCH] ARC: Change ld.as instruction to regular ld. Thread-Index: AQHR95PV9rUtnvBu3k2/Zm35qAJveqBLb1sA Date: Tue, 16 Aug 2016 13:15:33 +0000 Message-ID: <1471353226.3980.42.camel@synopsys.com> References: <1471334135-21801-1-git-send-email-liavr@mellanox.com> In-Reply-To: <1471334135-21801-1-git-send-email-liavr@mellanox.com> Accept-Language: en-US, ru-RU Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.121.14.110] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id u7GDHCVu009755 Hi Liav, On Tue, 2016-08-16 at 10:55 +0300, Liav Rehana wrote: > From: Liav Rehana > > The instruction ld.as takes as operands a base address and an offset, > and doesn't access the sum of these two, but the sum of the base > address and a shifted version of the offset. > This isn't what we want in that case, since it causes a bug during > the push and pop of r25, since his actual offset is given during > resume_user_mode_begin. > Thus, the use of ld solves this problem. > > Signed-off-by: Liav Rehana > --- Very nice catch! But IMHO description could be improved a little bit. Probably something like that: --------------------->8--------------------- "PT_user_r25" is offset in bytes within pt_regs structure. In its turn what "ld.as r1, [r2, x]" really does is r1 <- load_from(r2 + (x << data_size)) = load_from(r2 + x*4). But the code in question is supposed to load_from(r2 + x). This leads to obvious stack corruption. --------------------->8--------------------- Reviewed-by: Alexey Brodkin