From patchwork Wed Jul 13 02:47:49 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: chetan L X-Patchwork-Id: 104466 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 62AE01007D1 for ; Wed, 13 Jul 2011 12:48:13 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932278Ab1GMCsD (ORCPT ); Tue, 12 Jul 2011 22:48:03 -0400 Received: from mail-vx0-f174.google.com ([209.85.220.174]:36558 "EHLO mail-vx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758175Ab1GMCsB (ORCPT ); Tue, 12 Jul 2011 22:48:01 -0400 Received: by vxb39 with SMTP id 39so3896729vxb.19 for ; Tue, 12 Jul 2011 19:48:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; bh=Ot7+SGyg2wNwkMR5gMapS6RC2ddwU72ic6ftWcwrBMs=; b=AdUMMm0Qo8XikPBSOgp2JFDUXGp1LOpyS3RtsY5SO3WqNo6GWohTdWOvrTRWJrnDHt Hopj4pcqjWnPKjkkK7eZj86rm8WAA9TTqOXeIOeDogfasCSJ4rh5lTI4iNrtPJfEMSy+ HkVhrm4tLes3eMKzgLodHhVJ9mrAvPwmUw+o8= Received: by 10.220.38.4 with SMTP id z4mr194777vcd.115.1310525280515; Tue, 12 Jul 2011 19:48:00 -0700 (PDT) Received: from localhost (pool-173-48-47-243.bstnma.fios.verizon.net [173.48.47.243]) by mx.google.com with ESMTPS id w16sm2416720vco.5.2011.07.12.19.47.58 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 12 Jul 2011 19:47:59 -0700 (PDT) From: Chetan Loke To: davem@davemloft.net, netdev@vger.kernel.org Cc: lokechetan@gmail.com, eric.dumazet@gmail.com, Chetan Loke Subject: [PATCH net-next v2 1/1] af-packet: fix - avoid reading stale data Date: Tue, 12 Jul 2011 22:47:49 -0400 Message-Id: <1310525269-1288-1-git-send-email-loke.chetan@gmail.com> X-Mailer: git-send-email 1.7.5.2 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently we flush tp_status and then flush the remainder of the header+payload. tp_status should be flushed in the end to avoid stale data being read by user-space. Incorrectly re-ordered barriers in v1. Signed-off-by: Chetan Loke --- net/packet/af_packet.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index d2294ad..c698cec 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1129,7 +1129,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, else sll->sll_ifindex = dev->ifindex; - __packet_set_status(po, h.raw, status); smp_mb(); #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE == 1 { @@ -1138,8 +1137,10 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, end = (u8 *)PAGE_ALIGN((unsigned long)h.raw + macoff + snaplen); for (start = h.raw; start < end; start += PAGE_SIZE) flush_dcache_page(pgv_to_page(start)); + smp_wmb(); } #endif + __packet_set_status(po, h.raw, status); sk->sk_data_ready(sk, 0);