Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp737689ybi; Fri, 12 Jul 2019 03:55:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqyiqwa5MlFvihcmC390nP+Ylj2RSjN3Z24z5ICF+ZXrIIwM7Vt8zNBu37zfxjat8oI1b5F/ X-Received: by 2002:a17:902:4124:: with SMTP id e33mr2917776pld.6.1562928914114; Fri, 12 Jul 2019 03:55:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562928914; cv=none; d=google.com; s=arc-20160816; b=sszqHFyk0IU0KZL96tbJw8BQW/+Qae9gOtNI/QwqUVIwxIq8CeZqX8bLuFd4YAm4pV p6Ff466UfG8JaCIdgAPQVYIeBIOpcWDXf5vvLPCMAlSNCWwYJrXSAghnFbo4YEObVX8E KM+WW9f/dnviBB3g7nfjBCBuKTlflIm5ruYuDEtAhTYueSBUedYew6OzikaLOIsh4f6b xfC+ojedBLq+iKXT7qtC47/FBbchdZp4Hp5UeGBjPrOIMqtyXjHLcVVEuWdY87YsshXM E5MZQf8WqkhxrtxUb7NcyRlQye6K0ihCd0/CsBmi39y+ARTEQfR8BdCd+4wV7hHnTsjR GCew== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=O67v3k5bom5Y2GHrnJOdlacQsTwxZnyxwR9ee+CLLBI=; b=Atfs0tLcszOarla2nBqgRd82DbvUvncwc/hxiKwegU3HFuKfxJAWzPYoaIIZV6Wuor /q9PjaCpwUtcI6tWVYAZULbv8csE7Li7URfuDqhQ3KgyEWWl5QxygT2KSoDqK/L26boP 4XgNBINwut0e0r+qX949c1kQsZ/Y79uOOghHny6Fg/CgWxTgP5vtK46F1DFgEr0tYR0F dc/6s1/Ain/YuIztjzwboBdnHeMqpB4mLaKKYJeRpIuw3oIPvcdnDRbls5Gcah+MRgRX sP93rag8aSdZQBi8+a970de6ogWmsT/mr6Dcs9BSY6gD5MviMX6Q1hb021D/PECeNILs MQmQ== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a16si7265927pju.24.2019.07.12.03.54.58; Fri, 12 Jul 2019 03:55:14 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726765AbfGLKwy (ORCPT + 99 others); Fri, 12 Jul 2019 06:52:54 -0400 Received: from relay.sw.ru ([185.231.240.75]:38652 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726057AbfGLKwy (ORCPT ); Fri, 12 Jul 2019 06:52:54 -0400 Received: from [172.16.25.12] by relay.sw.ru with esmtp (Exim 4.92) (envelope-from ) id 1hltAL-0005Ih-PS; Fri, 12 Jul 2019 13:52:38 +0300 Subject: Re: [PATCH v3] kasan: add memory corruption identification for software tag-based mode To: Walter Wu Cc: Dmitry Vyukov , Alexander Potapenko , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Matthias Brugger , Martin Schwidefsky , Arnd Bergmann , Vasily Gorbik , Andrey Konovalov , "Jason A . Donenfeld" , Miles Chen , kasan-dev , LKML , Linux-MM , Linux ARM , linux-mediatek@lists.infradead.org, wsd_upstream References: <20190613081357.1360-1-walter-zh.wu@mediatek.com> <1560447999.15814.15.camel@mtksdccf07> <1560479520.15814.34.camel@mtksdccf07> <1560744017.15814.49.camel@mtksdccf07> <1560774735.15814.54.camel@mtksdccf07> <1561974995.18866.1.camel@mtksdccf07> <1562640832.9077.32.camel@mtksdccf07> <1562839579.5846.12.camel@mtksdccf07> From: Andrey Ryabinin Message-ID: <37897fb7-88c1-859a-dfcc-0a5e89a642e0@virtuozzo.com> Date: Fri, 12 Jul 2019 13:52:40 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <1562839579.5846.12.camel@mtksdccf07> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/11/19 1:06 PM, Walter Wu wrote: > On Wed, 2019-07-10 at 21:24 +0300, Andrey Ryabinin wrote: >> >> On 7/9/19 5:53 AM, Walter Wu wrote: >>> On Mon, 2019-07-08 at 19:33 +0300, Andrey Ryabinin wrote: >>>> >>>> On 7/5/19 4:34 PM, Dmitry Vyukov wrote: >>>>> On Mon, Jul 1, 2019 at 11:56 AM Walter Wu wrote: >> >>>>> >>>>> Sorry for delays. I am overwhelm by some urgent work. I afraid to >>>>> promise any dates because the next week I am on a conference, then >>>>> again a backlog and an intern starting... >>>>> >>>>> Andrey, do you still have concerns re this patch? This change allows >>>>> to print the free stack. >>>> >>>> I 'm not sure that quarantine is a best way to do that. Quarantine is made to delay freeing, but we don't that here. >>>> If we want to remember more free stacks wouldn't be easier simply to remember more stacks in object itself? >>>> Same for previously used tags for better use-after-free identification. >>>> >>> >>> Hi Andrey, >>> >>> We ever tried to use object itself to determine use-after-free >>> identification, but tag-based KASAN immediately released the pointer >>> after call kfree(), the original object will be used by another >>> pointer, if we use object itself to determine use-after-free issue, then >>> it has many false negative cases. so we create a lite quarantine(ring >>> buffers) to record recent free stacks in order to avoid those false >>> negative situations. >> >> I'm telling that *more* than one free stack and also tags per object can be stored. >> If object reused we would still have information about n-last usages of the object. >> It seems like much easier and more efficient solution than patch you proposing. >> > To make the object reused, we must ensure that no other pointers uses it > after kfree() release the pointer. > Scenario: > 1). The object reused information is valid when no another pointer uses > it. > 2). The object reused information is invalid when another pointer uses > it. > Do you mean that the object reused is scenario 1) ? > If yes, maybe we can change the calling quarantine_put() location. It > will be fully use that quarantine, but at scenario 2) it looks like to > need this patch. > If no, maybe i miss your meaning, would you tell me how to use invalid > object information? or? > KASAN keeps information about object with the object, right after payload in the kasan_alloc_meta struct. This information is always valid as long as slab page allocated. Currently it keeps only one last free stacktrace. It could be extended to record more free stacktraces and also record previously used tags which will allow you to identify use-after-free and extract right free stacktrace.