Loading net/sctp/ipv6.c +11 −8 Original line number Diff line number Diff line Loading @@ -837,15 +837,16 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr) if (type & IPV6_ADDR_LINKLOCAL) { if (!addr->v6.sin6_scope_id) return 0; dev = dev_get_by_index(&init_net, addr->v6.sin6_scope_id); if (!dev) return 0; if (!ipv6_chk_addr(&init_net, &addr->v6.sin6_addr, rcu_read_lock(); dev = dev_get_by_index_rcu(&init_net, addr->v6.sin6_scope_id); if (!dev || !ipv6_chk_addr(&init_net, &addr->v6.sin6_addr, dev, 0)) { dev_put(dev); rcu_read_unlock(); return 0; } dev_put(dev); rcu_read_unlock(); } else if (type == IPV6_ADDR_MAPPED) { if (!opt->v4mapped) return 0; Loading Loading @@ -873,10 +874,12 @@ static int sctp_inet6_send_verify(struct sctp_sock *opt, union sctp_addr *addr) if (type & IPV6_ADDR_LINKLOCAL) { if (!addr->v6.sin6_scope_id) return 0; dev = dev_get_by_index(&init_net, addr->v6.sin6_scope_id); rcu_read_lock(); dev = dev_get_by_index_rcu(&init_net, addr->v6.sin6_scope_id); rcu_read_unlock(); if (!dev) return 0; dev_put(dev); } af = opt->pf->af; } Loading Loading
net/sctp/ipv6.c +11 −8 Original line number Diff line number Diff line Loading @@ -837,15 +837,16 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr) if (type & IPV6_ADDR_LINKLOCAL) { if (!addr->v6.sin6_scope_id) return 0; dev = dev_get_by_index(&init_net, addr->v6.sin6_scope_id); if (!dev) return 0; if (!ipv6_chk_addr(&init_net, &addr->v6.sin6_addr, rcu_read_lock(); dev = dev_get_by_index_rcu(&init_net, addr->v6.sin6_scope_id); if (!dev || !ipv6_chk_addr(&init_net, &addr->v6.sin6_addr, dev, 0)) { dev_put(dev); rcu_read_unlock(); return 0; } dev_put(dev); rcu_read_unlock(); } else if (type == IPV6_ADDR_MAPPED) { if (!opt->v4mapped) return 0; Loading Loading @@ -873,10 +874,12 @@ static int sctp_inet6_send_verify(struct sctp_sock *opt, union sctp_addr *addr) if (type & IPV6_ADDR_LINKLOCAL) { if (!addr->v6.sin6_scope_id) return 0; dev = dev_get_by_index(&init_net, addr->v6.sin6_scope_id); rcu_read_lock(); dev = dev_get_by_index_rcu(&init_net, addr->v6.sin6_scope_id); rcu_read_unlock(); if (!dev) return 0; dev_put(dev); } af = opt->pf->af; } Loading