netlink: mmap: fix lookup frame position
authorKen-ichirou MATSUZAWA <chamaken@gmail.com>
Fri, 28 Aug 2015 07:05:20 +0000 (16:05 +0900)
committerDavid S. Miller <davem@davemloft.net>
Sat, 29 Aug 2015 05:25:42 +0000 (22:25 -0700)
__netlink_lookup_frame() was always called with the same "pos"
value in netlink_forward_ring(). It will look at the same ring entry
header over and over again, every time through this loop. Then cycle
through the whole ring, advancing ring->head, not "pos" until it
equals the "ring->head != head" loop test fails.

Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/af_netlink.c

index 3eea0b2..7965ca7 100644 (file)
@@ -611,11 +611,11 @@ static void netlink_increment_head(struct netlink_ring *ring)
 
 static void netlink_forward_ring(struct netlink_ring *ring)
 {
-       unsigned int head = ring->head, pos = head;
+       unsigned int head = ring->head;
        const struct nl_mmap_hdr *hdr;
 
        do {
-               hdr = __netlink_lookup_frame(ring, pos);
+               hdr = __netlink_lookup_frame(ring, ring->head);
                if (hdr->nm_status == NL_MMAP_STATUS_UNUSED)
                        break;
                if (hdr->nm_status != NL_MMAP_STATUS_SKIP)