From patchwork Tue Mar 10 00:03:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cong Wang X-Patchwork-Id: 448294 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40BF514018C for ; Tue, 10 Mar 2015 11:03:56 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=gmail.com header.i=@gmail.com header.b=Uf/f6RsM; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751376AbbCJADv (ORCPT ); Mon, 9 Mar 2015 20:03:51 -0400 Received: from mail-pd0-f174.google.com ([209.85.192.174]:39012 "EHLO mail-pd0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751011AbbCJADr (ORCPT ); Mon, 9 Mar 2015 20:03:47 -0400 Received: by pdbft15 with SMTP id ft15so38135651pdb.6 for ; Mon, 09 Mar 2015 17:03:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=jSm6HFML84zhxwcqbpr+ajzC8VUGolFxTVSr694SQ0o=; b=Uf/f6RsMJXSf8qC8tIOEqkkdbWomJPihLzN0QdV1yUMozB+//C980IpOulj3lXcazA eIuyIfDp+z45KRA3iz9gWveVDgIyPycCSr3hlNNL7QMmvfwGDkM3d8CRXbx7t9MYiKJO iANMPL1pHxbEMogY43l2Rxcr/Jr3dAX6QgQdZ3QN0TNjM6+4hEXJUivn62FKd4OSuzCw XKsqIA1hbW+D0bslpl1wOIk0slo9yP5Ecf/lnptwvNztcC+NlUyt87lTSdoLKM5EYZdD by/j/fwS3B6oO6Xk/qFF7iXVsdzavQPGJqVo31mTAKPWe7Hfho8ryuw7nhou1ZJ251Ei dYDA== X-Received: by 10.66.142.228 with SMTP id rz4mr59391225pab.86.1425945827459; Mon, 09 Mar 2015 17:03:47 -0700 (PDT) Received: from localhost.net ([8.25.197.27]) by mx.google.com with ESMTPSA id rf12sm13795535pdb.0.2015.03.09.17.03.46 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Mar 2015 17:03:46 -0700 (PDT) From: Cong Wang To: netdev@vger.kernel.org Cc: Cong Wang , Jamal Hadi Salim , John Fastabend Subject: [Patch net] net_sched: fix struct tc_u_hnode layout in u32 Date: Mon, 9 Mar 2015 17:03:40 -0700 Message-Id: <1425945820-9582-1-git-send-email-xiyou.wangcong@gmail.com> X-Mailer: git-send-email 1.8.3.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We dynamically allocate divisor+1 entries for ->ht[] in tc_u_hnode: ht = kzalloc(sizeof(*ht) + divisor*sizeof(void *), GFP_KERNEL); So ->ht is supposed to be the last field of this struct, however this is broken, since an rcu head is appended after it. Fixes: 1ce87720d456 ("net: sched: make cls_u32 lockless") Cc: Jamal Hadi Salim Cc: John Fastabend Signed-off-by: Cong Wang Acked-by: Eric Dumazet --- net/sched/cls_u32.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 09487af..95fdf4e 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -78,8 +78,11 @@ struct tc_u_hnode { struct tc_u_common *tp_c; int refcnt; unsigned int divisor; - struct tc_u_knode __rcu *ht[1]; struct rcu_head rcu; + /* The 'ht' field MUST be the last field in structure to allow for + * more entries allocated at end of structure. + */ + struct tc_u_knode __rcu *ht[1]; }; struct tc_u_common {