From mboxrd@z Thu Jan 1 00:00:00 1970 From: humbabek Subject: [PATCH] move smp_rmb() after load of status Date: Sat, 7 Jul 2018 21:23:17 +0200 Message-ID: <20180707192319.24771-1-humbabek@gmail.com> Cc: humbabek , "David S. Miller" , Willem de Bruijn , Eric Dumazet , Kees Cook , Kirill Tkhai , Mike Maloney , Magnus Karlsson , netdev@vger.kernel.org, linux-kernel@vger.kernel.org To: unlisted-recipients:; (no To-header on input) Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org Signed-off-by: humbabek --- net/packet/af_packet.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 57634bc3da74..91830ef07c48 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -394,25 +394,30 @@ static void __packet_set_status(struct packet_sock *po, void *frame, int status) static int __packet_get_status(struct packet_sock *po, void *frame) { union tpacket_uhdr h; - - smp_rmb(); + int status; h.raw = frame; switch (po->tp_version) { case TPACKET_V1: flush_dcache_page(pgv_to_page(&h.h1->tp_status)); - return h.h1->tp_status; + status = h.h1->tp_status; + break; case TPACKET_V2: flush_dcache_page(pgv_to_page(&h.h2->tp_status)); - return h.h2->tp_status; + status = h.h2->tp_status; + break; case TPACKET_V3: flush_dcache_page(pgv_to_page(&h.h3->tp_status)); - return h.h3->tp_status; + status = h.h3->tp_status; + break; default: WARN(1, "TPACKET version not supported.\n"); BUG(); - return 0; + status = 0; + break; } + smp_rmb(); + return status; } static __u32 tpacket_get_timestamp(struct sk_buff *skb, struct timespec *ts, -- 2.17.1