[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: Simon Arlott <simon@arlott.org> Signed-off-by: Jarek Poplawski <jarkao2@o2.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									ca4266359d
								
							
						
					
					
						commit
						e2eb8d4528
					
				| @ -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(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user