Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2eb8d45 authored by Jarek Poplawski's avatar Jarek Poplawski Committed by David S. Miller
Browse files

[SCTP] ipv6: inconsistent lock state ipv6_add_addr/sctp_v6_copy_addrlist



lockdep found that dev->lock taken from softirq in ipv6_add_addr
is also taken in sctp_v6_copy_addrlist with softirqs enabled, so
lockup is possible.

Noticed-by: default avatarSimon Arlott <simon@arlott.org>
Signed-off-by: default avatarJarek Poplawski <jarkao2@o2.pl>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ca426635
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -360,7 +360,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
		return;
	}

	read_lock(&in6_dev->lock);
	read_lock_bh(&in6_dev->lock);
	for (ifp = in6_dev->addr_list; ifp; ifp = ifp->if_next) {
		/* Add the address to the local list.  */
		addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC);
@@ -374,7 +374,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
		}
	}

	read_unlock(&in6_dev->lock);
	read_unlock_bh(&in6_dev->lock);
	rcu_read_unlock();
}