Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp9630710ybi; Wed, 10 Jul 2019 13:53:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqy9K8dKcsa8BzDgVy0JUw1zO1WQnsnpT+kBtPiuF7KqeLK/7tmY5I99KOk6qyW08m41Fr7z X-Received: by 2002:a17:90a:8c06:: with SMTP id a6mr367077pjo.45.1562792025106; Wed, 10 Jul 2019 13:53:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562792025; cv=none; d=google.com; s=arc-20160816; b=paTuwG33GMUj4S+VZ7BXnhQirQUYi+DFVqgQ9JSmLqteKa341XMmdk4xhVmzXSzVRF 34uaBDmM7p333GqGq0hcIR5zvUF2LRLHnLz6Lou300Mrdwohp2M5vV4vn/X2772ISNQ0 nmvNPokYXdCL1dJoxkCRwFbchCeLyx88SYlJrQsVU1nc32ESF77gfbjXBFDbr4hupTPR MOLKZgN+iVLF3rWlaAG6/dubIpNtsU1tDhNsNiOdAllgbZuavoRDESHRgPa1GYpXLkIR J3IPZnDvlx3fUYhrIauxG8VoRGtZdmOFrgNjqJBM6oRyWFCiMbiyu3iETma+gaN9Of43 fZFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=qtC5egLkr6FDak2iWiMiUha4yDwOlLCqb/iy6dvufbg=; b=ARnMH1Jw+iQkLUBV7e/b6Bcp8kRDA4NF3FoapeMWfGJxmR/5IMxdOxW++3LWRgjKwG xISKw0tWMUFJ8vQ5xMWe8/wqwZAUY2sXEP+cNehBqE6nI/8C/T448kqd148+TsnCUoZF RzaNhtRhOPhs7QPE7oquW2hW4IajKQSOzrRwqrLQuryPFPi1AJJznsdiUyt+7izczW3W tHG2Uwml6NaPqZHMCzZRVVI7uqCtHt+ihZfrSgk6+XKKOTmrNfFc8o35dG42Z4NKC/PK ohpHZ8D6kYcV5te3TBxQ6W+h66ju7guDHm8VnHcq/tHVGOI1A4uLJLWHkmBTJpGmjWMy GL/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=un30DGda; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d5si2957073pls.233.2019.07.10.13.53.29; Wed, 10 Jul 2019 13:53:45 -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; dkim=pass header.i=@google.com header.s=20161025 header.b=un30DGda; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727813AbfGJUvB (ORCPT + 99 others); Wed, 10 Jul 2019 16:51:01 -0400 Received: from mail-yw1-f67.google.com ([209.85.161.67]:39759 "EHLO mail-yw1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726033AbfGJUvB (ORCPT ); Wed, 10 Jul 2019 16:51:01 -0400 Received: by mail-yw1-f67.google.com with SMTP id x74so1272105ywx.6 for ; Wed, 10 Jul 2019 13:51:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=qtC5egLkr6FDak2iWiMiUha4yDwOlLCqb/iy6dvufbg=; b=un30DGdaaLTQqc9ulK9wePQZNwiEhBjveMWrvXlg8hVi2xvd+N8P2TXZEoi0WRxMdO llLXQjc8o0YK/GKoMM6Mks5D9YzdX5CrXqHUuepOEt99nRpwRW2rjT+WTCSeOQeeYhNY HkQJ/viI0xOIijcFCm8BT6F198ZZtsZfO85NmX7p8L3RZpoZF05hYiP5r80MbRionfnI KWsMsDligc3KwH/zocEMYeQo0LG5TkO/fPLkkVqoP7ez4YTr4+pklJjpeAOmu3yBa4NT XJlnM40YCOwVJubuwzLuIBGosoCyia3oKOEQxKKrSm5FRr2HoaOvlNKs3gNAdhg2r2WH x7Tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=qtC5egLkr6FDak2iWiMiUha4yDwOlLCqb/iy6dvufbg=; b=l/QTW3WNA6kcT3usiIyOagkqmTha9/Y7wDWK0OhT2QfFHH3AN05bDJmCVxA9ibRYxj pMxsZK0nuvy7yx7lDr71bQQy+XRBxfge3DUQX1MAQQsKODFTsvPxGnrsYuRYA6bBKEbf P8I1vK+As5RJhUBVo3p10JQLhwm1r9X4RN0PYwFSrG5TSyueguMlCG6sNfvyddkPBMfC AjxZWqFaA2zCw+QxKhEFtFDmcM2l/a5+n45sQcjAivJEYwoYHn8OXoDb3/c80JtCLDfS Z9wegMDglMxLWIjYB852sdAZ10da8UbA3xeZEOZ1mAN3pLzofRAHblo4HeHplDpkzdCE SArQ== X-Gm-Message-State: APjAAAXDW06FzEHHp+uWLIFOYSGIlyU3+qyqXcrabRXnF/QTSh5jBqV8 NSmS7+LjyFhF0+4HT5F1RTHv2Clz+nUCOPOrIVkTNA== X-Received: by 2002:a0d:c345:: with SMTP id f66mr19381788ywd.10.1562791859824; Wed, 10 Jul 2019 13:50:59 -0700 (PDT) MIME-Version: 1.0 References: <20190708134808.e89f3bfadd9f6ffd7eff9ba9@gmail.com> In-Reply-To: <20190708134808.e89f3bfadd9f6ffd7eff9ba9@gmail.com> From: Shakeel Butt Date: Wed, 10 Jul 2019 13:50:48 -0700 Message-ID: Subject: Re: [PATCH] mm/z3fold.c: don't try to use buddy slots after free To: Vitaly Wool Cc: Linux-MM , LKML , Henry Burns , Andrew Morton , Jonathan Adams Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jul 8, 2019 at 4:48 AM Vitaly Wool wrote: > > From fd87fdc38ea195e5a694102a57bd4d59fc177433 Mon Sep 17 00:00:00 2001 > From: Vitaly Wool > Date: Mon, 8 Jul 2019 13:41:02 +0200 > [PATCH] mm/z3fold: don't try to use buddy slots after free > > As reported by Henry Burns: > > Running z3fold stress testing with address sanitization > showed zhdr->slots was being used after it was freed. > > z3fold_free(z3fold_pool, handle) > free_handle(handle) > kmem_cache_free(pool->c_handle, zhdr->slots) > release_z3fold_page_locked_list(kref) > __release_z3fold_page(zhdr, true) > zhdr_to_pool(zhdr) > slots_to_pool(zhdr->slots) *BOOM* > > To fix this, add pointer to the pool back to z3fold_header and modify > zhdr_to_pool to return zhdr->pool. > > Fixes: 7c2b8baa61fe ("mm/z3fold.c: add structure for buddy handles") > > Reported-by: Henry Burns > Signed-off-by: Vitaly Wool Reviewed-by: Shakeel Butt > --- > mm/z3fold.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/mm/z3fold.c b/mm/z3fold.c > index 985732c8b025..e1686bf6d689 100644 > --- a/mm/z3fold.c > +++ b/mm/z3fold.c > @@ -101,6 +101,7 @@ struct z3fold_buddy_slots { > * @refcount: reference count for the z3fold page > * @work: work_struct for page layout optimization > * @slots: pointer to the structure holding buddy slots > + * @pool: pointer to the containing pool > * @cpu: CPU which this page "belongs" to > * @first_chunks: the size of the first buddy in chunks, 0 if free > * @middle_chunks: the size of the middle buddy in chunks, 0 if free > @@ -114,6 +115,7 @@ struct z3fold_header { > struct kref refcount; > struct work_struct work; > struct z3fold_buddy_slots *slots; > + struct z3fold_pool *pool; > short cpu; > unsigned short first_chunks; > unsigned short middle_chunks; > @@ -320,6 +322,7 @@ static struct z3fold_header *init_z3fold_page(struct page *page, > zhdr->start_middle = 0; > zhdr->cpu = -1; > zhdr->slots = slots; > + zhdr->pool = pool; > INIT_LIST_HEAD(&zhdr->buddy); > INIT_WORK(&zhdr->work, compact_page_work); > return zhdr; > @@ -426,7 +429,7 @@ static enum buddy handle_to_buddy(unsigned long handle) > > static inline struct z3fold_pool *zhdr_to_pool(struct z3fold_header *zhdr) > { > - return slots_to_pool(zhdr->slots); > + return zhdr->pool; > } > > static void __release_z3fold_page(struct z3fold_header *zhdr, bool locked) > -- > 2.17.1