From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752602AbcGDEdd (ORCPT ); Mon, 4 Jul 2016 00:33:33 -0400 Received: from LGEAMRELO11.lge.com ([156.147.23.51]:42524 "EHLO lgeamrelo11.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750757AbcGDEdc (ORCPT ); Mon, 4 Jul 2016 00:33:32 -0400 X-Original-SENDERIP: 156.147.1.151 X-Original-MAILFROM: iamjoonsoo.kim@lge.com X-Original-SENDERIP: 10.177.222.138 X-Original-MAILFROM: iamjoonsoo.kim@lge.com Date: Mon, 4 Jul 2016 13:36:48 +0900 From: Joonsoo Kim To: Andrey Ryabinin Cc: Andrew Morton , Alexander Potapenko , Dmitry Vyukov , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] kasan/quarantine: fix bugs on qlist_move_cache() Message-ID: <20160704043647.GA14840@js1304-P5Q-DELUXE> References: <1467381733-18314-1-git-send-email-iamjoonsoo.kim@lge.com> <57767B66.7070904@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <57767B66.7070904@virtuozzo.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 01, 2016 at 05:17:10PM +0300, Andrey Ryabinin wrote: > > > On 07/01/2016 05:02 PM, js1304@gmail.com wrote: > > From: Joonsoo Kim > > > > There are two bugs on qlist_move_cache(). One is that qlist's tail > > isn't set properly. curr->next can be NULL since it is singly linked > > list and NULL value on tail is invalid if there is one item on qlist. > > Another one is that if cache is matched, qlist_put() is called and > > it will set curr->next to NULL. It would cause to stop the loop > > prematurely. > > > > These problems come from complicated implementation so I'd like to > > re-implement it completely. Implementation in this patch is really > > simple. Iterate all qlist_nodes and put them to appropriate list. > > > > Unfortunately, I got this bug sometime ago and lose oops message. > > But, the bug looks trivial and no need to attach oops. > > > > v3: fix build warning > > > > Signed-off-by: Joonsoo Kim > > --- > > mm/kasan/quarantine.c | 21 +++++++-------------- > > 1 file changed, 7 insertions(+), 14 deletions(-) > > > > diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c > > index 4973505..cf92494 100644 > > --- a/mm/kasan/quarantine.c > > +++ b/mm/kasan/quarantine.c > > @@ -238,30 +238,23 @@ static void qlist_move_cache(struct qlist_head *from, > > struct qlist_head *to, > > struct kmem_cache *cache) > > { > > - struct qlist_node *prev = NULL, *curr; > > + struct qlist_node *curr; > > > > if (unlikely(qlist_empty(from))) > > return; > > > > curr = from->head; > > + qlist_init(from); > > while (curr) { > > struct qlist_node *qlink = curr; > > Can you please also get rid of either qlink or curr. > Those are essentially the same pointers. Hello, Before putting the qlist_node to the list, we need to calculate curr->next and remember it to iterate the list. I use curr for this purpose so qlink and curr are not the same pointer. Thanks.