Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp512647yba; Mon, 1 Apr 2019 10:47:37 -0700 (PDT) X-Google-Smtp-Source: APXvYqx16qneOOhRRGopQOMfsvakP1CB0g8ED9WxICXIV450iQaJ1gcKCnaxbLOHYbSZPrpclSNs X-Received: by 2002:aa7:8145:: with SMTP id d5mr23509349pfn.215.1554140857538; Mon, 01 Apr 2019 10:47:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554140857; cv=none; d=google.com; s=arc-20160816; b=CfL3SZceQ9XLO2iKQnKbnTvCooUoxm4a83oQ1pphSdhGF6FzGYyBfoJI8f/mBN5t9K VE8WxYXNI1Vsl70xxuUgSEpq93Ndr7dPfUuAdnkmG6JQqsc8bjAq9HO6h7i66ZQVCX4B S0/jKbvPWz8tCcT1ajQWEAXpBB0rkAHs0YmxbWPazRexXOTObsDtd6efKwFdSM4lVOMW r1/bAf47Lw9O9IoatPr/nDXVrkvnDJyF31vAAXC4UYUX/fTGPLLRHJm0PwBS6EhMwwWW pxC8k41qIDi1/4DzNgS/9EAl8DvfSzNv7Q4cipReipPnw11xCV7ZCs5VXv/bIf4a6Wem ZQiw== 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:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=2LEMyrgg55gmFmFpefEkK/JYaWSEriMAHvpNIqabwNM=; b=yCoMyDB3a3iZ3idJ0gkRfuW5zQsDKVJlvHG4yryvZof5z9EGkJQw0b+1EY17cIG8ID ecswW7MWhfPVjB0xLA70cOe759q9R5HLCZEd138/fcLgH5HzEppPqj9Hg+AEAG5emrde WJ9O3YQHLUreRQhgu7hN2qtMnDshBiI7MtYb2WK5jXgF52mWCwXvd+5I8O8UNTBo8miY K47KZBW6FDHINoScpKaJWMdVe8P3KQDXva0f4Icq+vyheuEPYJB2G4Q0rPYpRUBg6gvl 6CZ/mLpdZrt9JJG64rnIzK9b0I8ec35vDnkWTv1sKY2/AjERtCNVPkzOzDAH+nS5ffr3 hP6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=OJJya6ln; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k186si6087756pgd.206.2019.04.01.10.47.21; Mon, 01 Apr 2019 10:47:37 -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=@kernel.org header.s=default header.b=OJJya6ln; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387567AbfDARdC (ORCPT + 99 others); Mon, 1 Apr 2019 13:33:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:41496 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729057AbfDARdA (ORCPT ); Mon, 1 Apr 2019 13:33:00 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C729F20830; Mon, 1 Apr 2019 17:32:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554139979; bh=tgFAwDpRDxv7Y3iRtqNuN75Lb6Ip7CTJlEJ+DUcMQdk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OJJya6lnwUgJg0PVuGxAavd0DvJkuAnWyu6QwoFj8mQIq1BDUMjKIDjhlGR0iWhVt 9/jOZn2XCgzqv2ZCSyrn7TlDXb1JMO+i/LVAVD/g0sTINFc8JQxHFZUG8G6Z/tVzQN 9E5BRHE1lDACGva9gxOwSjTqas3JZUf/ZIE+O9zI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Android Kernel Team , Matt Wagantall , Syed Rameez Mustafa , Osvaldo Banuelos , Subbaraman Narayanamurthy , Laura Abbott , John Stultz , Sasha Levin Subject: [PATCH 4.4 069/131] staging: ashmem: Avoid deadlock with mmap/shrink Date: Mon, 1 Apr 2019 19:02:19 +0200 Message-Id: <20190401170057.951168935@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190401170051.645954551@linuxfoundation.org> References: <20190401170051.645954551@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 18e77054de741ef3ed2a2489bc9bf82a318b2d5e ] Both ashmem_mmap and ashmem_shrink take the ashmem_lock. It may be possible for ashmem_mmap to invoke ashmem_shrink: -000|mutex_lock(lock = 0x0) -001|ashmem_shrink(?, sc = 0x0) <--- try to take ashmem_mutex again -002|shrink_slab(shrink = 0xDA5F1CC0, nr_pages_scanned = 0, lru_pages -002|= -002|124) -003|try_to_free_pages(zonelist = 0x0, ?, ?, ?) -004|__alloc_pages_nodemask(gfp_mask = 21200, order = 1, zonelist = -004|0xC11D0940, -005|new_slab(s = 0xE4841E80, ?, node = -1) -006|__slab_alloc.isra.43.constprop.50(s = 0xE4841E80, gfpflags = -006|2148925462, ad -007|kmem_cache_alloc(s = 0xE4841E80, gfpflags = 208) -008|shmem_alloc_inode(?) -009|alloc_inode(sb = 0xE480E800) -010|new_inode_pseudo(?) -011|new_inode(?) -012|shmem_get_inode(sb = 0xE480E800, dir = 0x0, ?, dev = 0, flags = -012|187) -013|shmem_file_setup(?, ?, flags = 187) -014|ashmem_mmap(?, vma = 0xC5D64210) <---- Acquire ashmem_mutex -015|mmap_region(file = 0xDF8E2C00, addr = 1772974080, len = 233472, -015|flags = 57, -016|sys_mmap_pgoff(addr = 0, len = 230400, prot = 3, flags = 1, fd = -016|157, pgoff -017|ret_fast_syscall(asm) -->|exception -018|NUR:0x40097508(asm) ---|end of frame Avoid this deadlock by using mutex_trylock in ashmem_shrink; if the mutex is already held, do not attempt to shrink. Cc: Greg KH Cc: Android Kernel Team Reported-by: Matt Wagantall Reported-by: Syed Rameez Mustafa Reported-by: Osvaldo Banuelos Reported-by: Subbaraman Narayanamurthy Signed-off-by: Laura Abbott [jstultz: Minor commit message tweaks] Signed-off-by: John Stultz Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/staging/android/ashmem.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c index e9c74c41aece..b4c425383f99 100644 --- a/drivers/staging/android/ashmem.c +++ b/drivers/staging/android/ashmem.c @@ -447,7 +447,9 @@ ashmem_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) if (!(sc->gfp_mask & __GFP_FS)) return SHRINK_STOP; - mutex_lock(&ashmem_mutex); + if (!mutex_trylock(&ashmem_mutex)) + return -1; + list_for_each_entry_safe(range, next, &ashmem_lru_list, lru) { loff_t start = range->pgstart * PAGE_SIZE; loff_t end = (range->pgend + 1) * PAGE_SIZE; -- 2.19.1