[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20141218.123657.406400603290543610.davem@davemloft.net>
Date: Thu, 18 Dec 2014 12:36:57 -0500 (EST)
From: David Miller <davem@...emloft.net>
To: tgraf@...g.ch
Cc: eric.dumazet@...il.com, dborkman@...hat.com, luto@...capital.net,
torvalds@...ux-foundation.org, kaber@...sh.net,
netdev@...r.kernel.org
Subject: Re: [PATCH net] netlink: Don't reorder loads/stores before marking
mmap netlink frame as available
From: Thomas Graf <tgraf@...g.ch>
Date: Thu, 18 Dec 2014 10:30:26 +0000
> Each mmap Netlink frame contains a status field which indicates
> whether the frame is unused, reserved, contains data or needs to
> be skipped. Both loads and stores may not be reordeded and must
> complete before the status field is changed and another CPU might
> pick up the frame for use. Use an smp_mb() to cover needs of both
> types of callers to netlink_set_status(), callers which have been
> reading data frame from the frame, and callers which have been
> filling or releasing and thus writing to the frame.
>
> - Example code path requiring a smp_rmb():
> memcpy(skb->data, (void *)hdr + NL_MMAP_HDRLEN, hdr->nm_len);
> netlink_set_status(hdr, NL_MMAP_STATUS_UNUSED);
>
> - Example code path requiring a smp_wmb():
> hdr->nm_uid = from_kuid(sk_user_ns(sk), NETLINK_CB(skb).creds.uid);
> hdr->nm_gid = from_kgid(sk_user_ns(sk), NETLINK_CB(skb).creds.gid);
> netlink_frame_flush_dcache(hdr);
> netlink_set_status(hdr, NL_MMAP_STATUS_VALID);
>
> Fixes: f9c228 ("netlink: implement memory mapped recvmsg()")
> Reported-by: Eric Dumazet <eric.dumazet@...il.com>
> Signed-off-by: Thomas Graf <tgraf@...g.ch>
Also applied and queued up for -stable, thanks Thomas.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists