Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp712010pxt; Fri, 6 Aug 2021 11:49:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwL0JVop9Sm84weakw22dDbAXgFBnbjO+rNI5pJnMty+V+EIvh1WjD9OgM2a30r2SRgiNht X-Received: by 2002:a92:1a44:: with SMTP id z4mr1374244ill.244.1628275782734; Fri, 06 Aug 2021 11:49:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628275782; cv=none; d=google.com; s=arc-20160816; b=TlZpKDe/8VQeykW0SUsMLbkxpvgP1LoaqjXEB5RuthC+DAJWz+CAKHWp62Qq+2YjBn zOL9PHERc7pLdaTGwlmbEUcGn3iAwiGYYlRAsoJRdCP9W9sEanceKVq7NEmc3LaIK9AD fhKBTUshVSwVnSCSjMM1+6inzIe1z8jLY/x7863ZsvBWC0HBjrnDdBan4X21dywuBqLM 1DlQhNwrcJdsvwlW7OaBnqHODnYpaqYiM3RDc21dy3pqqKPbfH7HPdiKw0CzeXT6ED6d /dplItsB10QPN1wAqEcYrsvJc9XqrochxLtolVulHkvurstjZwPTkp1cx9nL129M2kYP VClg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=fxLHAvo7qhD9XWmMJoFjuH7u8Ru4SmfO3yP3EXV4WKc=; b=XQvtkwobGwj5pufUxNMUrXGSymZsxBVFutRzZH+UjEtdQS24u780l6Dukp23zVDEuw 3Mvc90FImYyJtn8rf1w1SupDSmLNlC6WlebBCbnFkuHRo/M0IsMl9LHkfpU/D54RiFaf 8jPkb1XZBA7kvB1WoRT1Xqav1gIw+L5uGkc0oPY4YqAy78N3xp9RCTPwGGEs2EwzNPqa meSO2lEizSl3QiLPy0grZ/ORzNdRjoYWa3rhBhFFAOO+SIav6DZ4qLkYTAFfueOCsqn7 ueYnEm51ZZHj4OGipnsWwvPYKunyvckLqextQXf+vUKC0cyyDUjnUdQtHwAaig0LM1uQ AeAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=kGqpxt97; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r17si10929877iov.104.2021.08.06.11.49.31; Fri, 06 Aug 2021 11:49:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=kGqpxt97; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344290AbhHFNnq (ORCPT + 99 others); Fri, 6 Aug 2021 09:43:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:46068 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244377AbhHFNnp (ORCPT ); Fri, 6 Aug 2021 09:43:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 527BA61078; Fri, 6 Aug 2021 13:43:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1628257409; bh=xB3Efw0KXOZkZsJCIwg4mugkxOXkw3lNVMttVabtPSA=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=kGqpxt97w3mtx0+CKwBdCQ/SbUmUaTJDs7BbKjB6R6Y0XrjDTmUECv/YzfEntiPst xP10VhgKHno40Ix6Jkk41Q/z+yOKopmGf0SeiLl0IACwOjoZYd6F/XTXux4+GC4//p HUdfZ7g5JiBxqZkIkxV76Y71WSlv5ZOOoEjCsItlMYtZQgRjV1W2wIGWmrvE760a6Z uqh3eQ9+NkfZoEN/hzHtQVYDC7/yYMVGjylHEUFrvS0F/O/AZRaQldzcojwCS95Zk3 aOko5fafiyQhvZnTwQ6pjRCNkyaLV3SSdaJyvc811BqE9LJVfjCALJ6re7Lyz1VTp8 qYTI/3iJAXq4Q== Date: Fri, 6 Aug 2021 06:43:28 -0700 From: Jakub Kicinski To: Kefeng Wang , Cc: , , , , , Daniel Borkmann , "Eric Dumazet" , Minmin chen Subject: Re: [PATCH v2] once: Fix panic when module unload Message-ID: <20210806064328.1b54a7f0@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com> In-Reply-To: <20210806082124.96607-1-wangkefeng.wang@huawei.com> References: <20210806082124.96607-1-wangkefeng.wang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 6 Aug 2021 16:21:24 +0800 Kefeng Wang wrote: > DO_ONCE > DEFINE_STATIC_KEY_TRUE(___once_key); > __do_once_done > once_disable_jump(once_key); > INIT_WORK(&w->work, once_deferred); > struct once_work *w; > w->key = key; > schedule_work(&w->work); module unload > //*the key is > destroy* > process_one_work > once_deferred > BUG_ON(!static_key_enabled(work->key)); > static_key_count((struct static_key *)x) //*access key, crash* > > When module uses DO_ONCE mechanism, it could crash due to the above > concurrency problem, we could reproduce it with link[1]. > > Fix it by add/put module refcount in the once work process. > > [1] https://lore.kernel.org/netdev/eaa6c371-465e-57eb-6be9-f4b16b9d7cbf@huawei.com/ Seems reasonable. Greg does it look good to you? I think we can take it thru networking since nobody cared to pick up v1.