Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754613AbdLTJnz convert rfc822-to-8bit (ORCPT ); Wed, 20 Dec 2017 04:43:55 -0500 Received: from smtp-out4.electric.net ([192.162.216.187]:63226 "EHLO smtp-out4.electric.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753744AbdLTJnv (ORCPT ); Wed, 20 Dec 2017 04:43:51 -0500 From: David Laight To: "'Al Viro'" , Linus Torvalds CC: Matthew Wilcox , "Tobin C. Harding" , Dmitry Vyukov , Kees Cook , "Tetsuo Handa" , Linux-MM , syzbot , David Windsor , "keun-o.park@darkmatter.ae" , Laura Abbott , LKML , Mark Rutland , "Ingo Molnar" , "syzkaller-bugs@googlegroups.com" , Will Deacon Subject: RE: BUG: bad usercopy in memdup_user Thread-Topic: BUG: bad usercopy in memdup_user Thread-Index: AQHTeRNLnlbio6wu50mL5apOo8jfSKNL+Y5Q Date: Wed, 20 Dec 2017 09:44:00 +0000 Message-ID: References: <001a113e9ca8a3affd05609d7ccf@google.com> <6a50d160-56d0-29f9-cfed-6c9202140b43@I-love.SAKURA.ne.jp> <20171219083746.GR19604@eros> <20171219132246.GD13680@bombadil.infradead.org> <20171219214849.GU21978@ZenIV.linux.org.uk> In-Reply-To: <20171219214849.GU21978@ZenIV.linux.org.uk> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.202.205.33] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-Outbound-IP: 156.67.243.126 X-Env-From: David.Laight@ACULAB.COM X-Proto: esmtps X-Revdns: X-HELO: AcuMS.aculab.com X-TLS: TLSv1.2:ECDHE-RSA-AES256-SHA384:256 X-Authenticated_ID: X-PolicySMART: 3396946, 3397078 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1325 Lines: 31 From: Al Viro > Sent: 19 December 2017 21:49 > > I suspect that an "offset and size within the kernel object" value > > might make sense. But what does the _pointer_ tell you? > > Well, for example seeing a 0xfffffffffffffff4 where a pointer to object > must have been is a pretty strong hint to start looking for a way for > that ERR_PTR(-ENOMEM) having ended up there... Something like > 0x6e69622f7273752f is almost certainly a misplaced "/usr/bin", i.e. a > pathname overwriting whatever it ends up in, etc. And yes, I have run > into both of those in real life. > > Debugging the situation when crap value has ended up in place of a > pointer is certainly a case where you do want to see what exactly has > ended up in there... I've certainly seen a lot of ascii in pointers (usually because the previous item has overrun). Although I suspect they'd appear in the fault frame - which hopefully carries real addresses. A compromise would be to hash the 'page' part of the address. On 64bit systems this is probably about 32 bits. It would still show whether pointers are user, kernel, vmalloc (etc) but without giving away the actual value. The page offset (12 bits) would show the alignment (etc). Including a per-boot random number would make it harder to generate 'rainbow tables' to reverse the hash. David