From patchwork Mon Nov 6 21:47:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cong Wang X-Patchwork-Id: 834953 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ueAc9c4B"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yW5lL4g4Sz9ryv for ; Tue, 7 Nov 2017 08:47:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752642AbdKFVrz (ORCPT ); Mon, 6 Nov 2017 16:47:55 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:46219 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751552AbdKFVry (ORCPT ); Mon, 6 Nov 2017 16:47:54 -0500 Received: by mail-pg0-f68.google.com with SMTP id k7so9298353pga.3 for ; Mon, 06 Nov 2017 13:47:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=43w1Oq4zQtvXJwGvW/nRHDOAEkfF4X3yccd9En6ak7Q=; b=ueAc9c4BmMzI6xtW379FJUOqK0VILEOiehOOv/oXbBQ7xMMzHQSckQiRepp3wSm73K RVihgOi7BLxIqsXP98u5ndStL1evCsn9RE7WYQNhGwI3RC/b4qONJ45XIIze+CQ1euhl Hwbh21Gzi+ORDGdalVf88/ogLwqrHmaJ3Z0ByTz4J1Mjm5yF43dU6PFfTLOLy92Y9S2T vacCztGzWkqDG4juzsyMpG+JRB+BEwBd30tlQCMcTDCJHZY7QHyfaZAvop/V2Ng4KFOp tFPgPVdFpEWyk3r0k8fM8SkIcJFZUkbKJG4alLfwdAHsU82SFzOY+/2MsZqnp0Dsx+GN aOCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=43w1Oq4zQtvXJwGvW/nRHDOAEkfF4X3yccd9En6ak7Q=; b=AKPoZZJzst9HxsjihEONDsSPu+YkQMI/A/fzyo/qePr6Eu1KnjgOL6xDDDaTseXr22 RDmK/YdtQe03z9OMnASSm7oI6oSBnAcMZ0hfgGJHEqbtEMw91rEzCoxJjlQhob8mNzpO iMez6UR6BDx6C+wDOb8ihOCCEkqqCYP7jxPzJn2n2LX/GEjRtOYE6TMnFKxGHgQ1vCGH AozVerDuUcy6Y//eokpM4rhvRW5o3KjMFolZZorSs3NJEDfx0/mRAHN1MU+A6DWl7Nm1 qbE7wbAF6GQwO92GiX7GU7v/V3MJ/C3iideAttMuCWCQm7xv6Q2+IlAqADBRz70mbxPh PSLQ== X-Gm-Message-State: AMCzsaXiJpHXhezyX10fLYBz6ZWpJ443K1/pocFmYfx49+oRWREy7lP7 Os/vpgYGBSnHaH6N+cy0qzr5ovUD X-Google-Smtp-Source: ABhQp+TsOJXi/rV//LKbcPNzPs2XLyZCXYTqVllDXZD/k9pKklrCkCUcYelMlfUB4wNFrTV4byOZhw== X-Received: by 10.99.176.6 with SMTP id h6mr16393147pgf.358.1510004873982; Mon, 06 Nov 2017 13:47:53 -0800 (PST) Received: from tw-172-25-30-113.office.twttr.net ([8.25.197.25]) by smtp.gmail.com with ESMTPSA id 84sm24246799pfy.179.2017.11.06.13.47.53 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 06 Nov 2017 13:47:53 -0800 (PST) From: Cong Wang To: netdev@vger.kernel.org Cc: Cong Wang , Lucas Bates , Jamal Hadi Salim , Jiri Pirko Subject: [Patch net 00/13] net_sched: close the race between call_rcu() and cleanup_net() Date: Mon, 6 Nov 2017 13:47:17 -0800 Message-Id: <20171106214730.24421-1-xiyou.wangcong@gmail.com> X-Mailer: git-send-email 2.9.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patchset tries to fix the race between call_rcu() and cleanup_net() again. Without holding the netns refcnt the tc_action_net_exit() in netns workqueue could be called before filter destroy works in tc filter workqueue. This patchset moves the netns refcnt from tc actions to tcf_exts, without breaking per-netns tc actions. Patch 1 reverts the previous fix, patch 2 introduces two new API's to help to address the bug and the rest patches switch to the new API's. Please see each patch for details. I was not able to reproduce this bug, but now after adding some delay in filter destroy work I manage to trigger the crash. After this patchset, the crash is not reproducible any more and the debugging printk's show the order is expected too. Fixes: ddf97ccdd7cb ("net_sched: add network namespace support for tc actions") Reported-by: Lucas Bates Cc: Lucas Bates Cc: Jamal Hadi Salim Cc: Jiri Pirko Signed-off-by: Cong Wang Cong Wang (13): Revert "net_sched: hold netns refcnt for each action" net_sched: introduce tcf_exts_get_net() and tcf_exts_put_net() cls_basic: use tcf_exts_get_net() before call_rcu() cls_bpf: use tcf_exts_get_net() before call_rcu() cls_cgroup: use tcf_exts_get_net() before call_rcu() cls_flow: use tcf_exts_get_net() before call_rcu() cls_flower: use tcf_exts_get_net() before call_rcu() cls_fw: use tcf_exts_get_net() before call_rcu() cls_matchall: use tcf_exts_get_net() before call_rcu() cls_route: use tcf_exts_get_net() before call_rcu() cls_rsvp: use tcf_exts_get_net() before call_rcu() cls_tcindex: use tcf_exts_get_net() before call_rcu() cls_u32: use tcf_exts_get_net() before call_rcu() include/net/act_api.h | 4 +--- include/net/pkt_cls.h | 24 ++++++++++++++++++++++++ net/sched/act_api.c | 2 -- net/sched/act_bpf.c | 2 +- net/sched/act_connmark.c | 2 +- net/sched/act_csum.c | 2 +- net/sched/act_gact.c | 2 +- net/sched/act_ife.c | 2 +- net/sched/act_ipt.c | 4 ++-- net/sched/act_mirred.c | 2 +- net/sched/act_nat.c | 2 +- net/sched/act_pedit.c | 2 +- net/sched/act_police.c | 2 +- net/sched/act_sample.c | 2 +- net/sched/act_simple.c | 2 +- net/sched/act_skbedit.c | 2 +- net/sched/act_skbmod.c | 2 +- net/sched/act_tunnel_key.c | 2 +- net/sched/act_vlan.c | 2 +- net/sched/cls_api.c | 1 + net/sched/cls_basic.c | 20 +++++++++++++++----- net/sched/cls_bpf.c | 7 ++++++- net/sched/cls_cgroup.c | 24 ++++++++++++++++++------ net/sched/cls_flow.c | 24 ++++++++++++++++++------ net/sched/cls_flower.c | 16 +++++++++++++--- net/sched/cls_fw.c | 17 ++++++++++++++--- net/sched/cls_matchall.c | 15 ++++++++++++--- net/sched/cls_route.c | 17 ++++++++++++++--- net/sched/cls_rsvp.h | 15 ++++++++++++--- net/sched/cls_tcindex.c | 33 ++++++++++++++++++++++++++------- net/sched/cls_u32.c | 8 +++++++- 31 files changed, 198 insertions(+), 63 deletions(-)