Loading net/sctp/bind_addr.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -239,8 +239,8 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); af = sctp_get_af_specific(addr->a_h.v4.sin_family); af = sctp_get_af_specific(addr->a.v4.sin_family); len = af->to_addr_param(&addr->a_h, &rawaddr); len = af->to_addr_param(&addr->a, &rawaddr); memcpy(addrparms.v, &rawaddr, len); memcpy(addrparms.v, &rawaddr, len); addrparms.v += len; addrparms.v += len; addrparms_len += len; addrparms_len += len; Loading net/sctp/ipv6.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -290,8 +290,8 @@ static void sctp_v6_get_saddr(struct sctp_association *asoc, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { laddr = list_entry(pos, struct sctp_sockaddr_entry, list); laddr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((laddr->use_as_src) && if ((laddr->use_as_src) && (laddr->a_h.sa.sa_family == AF_INET6) && (laddr->a.sa.sa_family == AF_INET6) && (scope <= sctp_scope(&laddr->a_h))) { (scope <= sctp_scope(&laddr->a))) { bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a); bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a); if (!baddr || (matchlen < bmatchlen)) { if (!baddr || (matchlen < bmatchlen)) { baddr = &laddr->a; baddr = &laddr->a; Loading net/sctp/protocol.c +5 −5 Original line number Original line Diff line number Diff line Loading @@ -224,14 +224,14 @@ int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope, sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); if (sctp_in_scope(&addr->a_h, scope)) { if (sctp_in_scope(&addr->a, scope)) { /* Now that the address is in scope, check to see if /* Now that the address is in scope, check to see if * the address type is really supported by the local * the address type is really supported by the local * sock as well as the remote peer. * sock as well as the remote peer. */ */ if ((((AF_INET == addr->a_h.sa.sa_family) && if ((((AF_INET == addr->a.sa.sa_family) && (copy_flags & SCTP_ADDR4_PEERSUPP))) || (copy_flags & SCTP_ADDR4_PEERSUPP))) || (((AF_INET6 == addr->a_h.sa.sa_family) && (((AF_INET6 == addr->a.sa.sa_family) && (copy_flags & SCTP_ADDR6_ALLOWED) && (copy_flags & SCTP_ADDR6_ALLOWED) && (copy_flags & SCTP_ADDR6_PEERSUPP)))) { (copy_flags & SCTP_ADDR6_PEERSUPP)))) { error = sctp_add_bind_addr(bp, &addr->a, 1, error = sctp_add_bind_addr(bp, &addr->a, 1, Loading Loading @@ -503,8 +503,8 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc, laddr = list_entry(pos, struct sctp_sockaddr_entry, list); laddr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((laddr->use_as_src) && if ((laddr->use_as_src) && (AF_INET == laddr->a_h.sa.sa_family)) { (AF_INET == laddr->a.sa.sa_family)) { fl.fl4_src = laddr->a_h.v4.sin_addr.s_addr; fl.fl4_src = laddr->a.v4.sin_addr.s_addr; if (!ip_route_output_key(&rt, &fl)) { if (!ip_route_output_key(&rt, &fl)) { dst = &rt->u.dst; dst = &rt->u.dst; goto out_unlock; goto out_unlock; Loading net/sctp/socket.c +10 −14 Original line number Original line Diff line number Diff line Loading @@ -3867,14 +3867,14 @@ static int sctp_getsockopt_local_addrs_num_old(struct sock *sk, int len, if (sctp_list_single_entry(&bp->address_list)) { if (sctp_list_single_entry(&bp->address_list)) { addr = list_entry(bp->address_list.next, addr = list_entry(bp->address_list.next, struct sctp_sockaddr_entry, list); struct sctp_sockaddr_entry, list); if (sctp_is_any(&addr->a_h)) { if (sctp_is_any(&addr->a)) { sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, addr = list_entry(pos, struct sctp_sockaddr_entry, struct sctp_sockaddr_entry, list); list); if ((PF_INET == sk->sk_family) && if ((PF_INET == sk->sk_family) && (AF_INET6 == addr->a_h.sa.sa_family)) (AF_INET6 == addr->a.sa.sa_family)) continue; continue; cnt++; cnt++; } } Loading Loading @@ -3912,13 +3912,12 @@ static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_add list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((PF_INET == sk->sk_family) && if ((PF_INET == sk->sk_family) && (AF_INET6 == addr->a_h.sa.sa_family)) (AF_INET6 == addr->a.sa.sa_family)) continue; continue; memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), &temp); &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; temp.v4.sin_port = htons(port); if (copy_to_user(to, &temp, addrlen)) { if (copy_to_user(to, &temp, addrlen)) { sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); flags); Loading Loading @@ -3947,15 +3946,14 @@ static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port, list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((PF_INET == sk->sk_family) && if ((PF_INET == sk->sk_family) && (AF_INET6 == addr->a_h.sa.sa_family)) (AF_INET6 == addr->a.sa.sa_family)) continue; continue; memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), &temp); &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; if(space_left<addrlen) if(space_left<addrlen) return -ENOMEM; return -ENOMEM; temp.v4.sin_port = htons(port); if (copy_to_user(*to, &temp, addrlen)) { if (copy_to_user(*to, &temp, addrlen)) { sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); flags); Loading Loading @@ -4023,7 +4021,7 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len, if (sctp_list_single_entry(&bp->address_list)) { if (sctp_list_single_entry(&bp->address_list)) { addr = list_entry(bp->address_list.next, addr = list_entry(bp->address_list.next, struct sctp_sockaddr_entry, list); struct sctp_sockaddr_entry, list); if (sctp_is_any(&addr->a_h)) { if (sctp_is_any(&addr->a)) { cnt = sctp_copy_laddrs_to_user_old(sk, bp->port, cnt = sctp_copy_laddrs_to_user_old(sk, bp->port, getaddrs.addr_num, getaddrs.addr_num, to); to); Loading @@ -4037,10 +4035,9 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; temp.v4.sin_port = htons(temp.v4.sin_port); if (copy_to_user(to, &temp, addrlen)) { if (copy_to_user(to, &temp, addrlen)) { err = -EFAULT; err = -EFAULT; goto unlock; goto unlock; Loading Loading @@ -4113,7 +4110,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, if (sctp_list_single_entry(&bp->address_list)) { if (sctp_list_single_entry(&bp->address_list)) { addr = list_entry(bp->address_list.next, addr = list_entry(bp->address_list.next, struct sctp_sockaddr_entry, list); struct sctp_sockaddr_entry, list); if (sctp_is_any(&addr->a_h)) { if (sctp_is_any(&addr->a)) { cnt = sctp_copy_laddrs_to_user(sk, bp->port, cnt = sctp_copy_laddrs_to_user(sk, bp->port, &to, space_left); &to, space_left); if (cnt < 0) { if (cnt < 0) { Loading @@ -4126,12 +4123,11 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; if(space_left < addrlen) if(space_left < addrlen) return -ENOMEM; /*fixme: right error?*/ return -ENOMEM; /*fixme: right error?*/ temp.v4.sin_port = htons(temp.v4.sin_port); if (copy_to_user(to, &temp, addrlen)) { if (copy_to_user(to, &temp, addrlen)) { err = -EFAULT; err = -EFAULT; goto unlock; goto unlock; Loading Loading
net/sctp/bind_addr.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -239,8 +239,8 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); af = sctp_get_af_specific(addr->a_h.v4.sin_family); af = sctp_get_af_specific(addr->a.v4.sin_family); len = af->to_addr_param(&addr->a_h, &rawaddr); len = af->to_addr_param(&addr->a, &rawaddr); memcpy(addrparms.v, &rawaddr, len); memcpy(addrparms.v, &rawaddr, len); addrparms.v += len; addrparms.v += len; addrparms_len += len; addrparms_len += len; Loading
net/sctp/ipv6.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -290,8 +290,8 @@ static void sctp_v6_get_saddr(struct sctp_association *asoc, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { laddr = list_entry(pos, struct sctp_sockaddr_entry, list); laddr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((laddr->use_as_src) && if ((laddr->use_as_src) && (laddr->a_h.sa.sa_family == AF_INET6) && (laddr->a.sa.sa_family == AF_INET6) && (scope <= sctp_scope(&laddr->a_h))) { (scope <= sctp_scope(&laddr->a))) { bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a); bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a); if (!baddr || (matchlen < bmatchlen)) { if (!baddr || (matchlen < bmatchlen)) { baddr = &laddr->a; baddr = &laddr->a; Loading
net/sctp/protocol.c +5 −5 Original line number Original line Diff line number Diff line Loading @@ -224,14 +224,14 @@ int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope, sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); if (sctp_in_scope(&addr->a_h, scope)) { if (sctp_in_scope(&addr->a, scope)) { /* Now that the address is in scope, check to see if /* Now that the address is in scope, check to see if * the address type is really supported by the local * the address type is really supported by the local * sock as well as the remote peer. * sock as well as the remote peer. */ */ if ((((AF_INET == addr->a_h.sa.sa_family) && if ((((AF_INET == addr->a.sa.sa_family) && (copy_flags & SCTP_ADDR4_PEERSUPP))) || (copy_flags & SCTP_ADDR4_PEERSUPP))) || (((AF_INET6 == addr->a_h.sa.sa_family) && (((AF_INET6 == addr->a.sa.sa_family) && (copy_flags & SCTP_ADDR6_ALLOWED) && (copy_flags & SCTP_ADDR6_ALLOWED) && (copy_flags & SCTP_ADDR6_PEERSUPP)))) { (copy_flags & SCTP_ADDR6_PEERSUPP)))) { error = sctp_add_bind_addr(bp, &addr->a, 1, error = sctp_add_bind_addr(bp, &addr->a, 1, Loading Loading @@ -503,8 +503,8 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc, laddr = list_entry(pos, struct sctp_sockaddr_entry, list); laddr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((laddr->use_as_src) && if ((laddr->use_as_src) && (AF_INET == laddr->a_h.sa.sa_family)) { (AF_INET == laddr->a.sa.sa_family)) { fl.fl4_src = laddr->a_h.v4.sin_addr.s_addr; fl.fl4_src = laddr->a.v4.sin_addr.s_addr; if (!ip_route_output_key(&rt, &fl)) { if (!ip_route_output_key(&rt, &fl)) { dst = &rt->u.dst; dst = &rt->u.dst; goto out_unlock; goto out_unlock; Loading
net/sctp/socket.c +10 −14 Original line number Original line Diff line number Diff line Loading @@ -3867,14 +3867,14 @@ static int sctp_getsockopt_local_addrs_num_old(struct sock *sk, int len, if (sctp_list_single_entry(&bp->address_list)) { if (sctp_list_single_entry(&bp->address_list)) { addr = list_entry(bp->address_list.next, addr = list_entry(bp->address_list.next, struct sctp_sockaddr_entry, list); struct sctp_sockaddr_entry, list); if (sctp_is_any(&addr->a_h)) { if (sctp_is_any(&addr->a)) { sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, addr = list_entry(pos, struct sctp_sockaddr_entry, struct sctp_sockaddr_entry, list); list); if ((PF_INET == sk->sk_family) && if ((PF_INET == sk->sk_family) && (AF_INET6 == addr->a_h.sa.sa_family)) (AF_INET6 == addr->a.sa.sa_family)) continue; continue; cnt++; cnt++; } } Loading Loading @@ -3912,13 +3912,12 @@ static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_add list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((PF_INET == sk->sk_family) && if ((PF_INET == sk->sk_family) && (AF_INET6 == addr->a_h.sa.sa_family)) (AF_INET6 == addr->a.sa.sa_family)) continue; continue; memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), &temp); &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; temp.v4.sin_port = htons(port); if (copy_to_user(to, &temp, addrlen)) { if (copy_to_user(to, &temp, addrlen)) { sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); flags); Loading Loading @@ -3947,15 +3946,14 @@ static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port, list_for_each(pos, &sctp_local_addr_list) { list_for_each(pos, &sctp_local_addr_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); if ((PF_INET == sk->sk_family) && if ((PF_INET == sk->sk_family) && (AF_INET6 == addr->a_h.sa.sa_family)) (AF_INET6 == addr->a.sa.sa_family)) continue; continue; memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), &temp); &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; if(space_left<addrlen) if(space_left<addrlen) return -ENOMEM; return -ENOMEM; temp.v4.sin_port = htons(port); if (copy_to_user(*to, &temp, addrlen)) { if (copy_to_user(*to, &temp, addrlen)) { sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); flags); Loading Loading @@ -4023,7 +4021,7 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len, if (sctp_list_single_entry(&bp->address_list)) { if (sctp_list_single_entry(&bp->address_list)) { addr = list_entry(bp->address_list.next, addr = list_entry(bp->address_list.next, struct sctp_sockaddr_entry, list); struct sctp_sockaddr_entry, list); if (sctp_is_any(&addr->a_h)) { if (sctp_is_any(&addr->a)) { cnt = sctp_copy_laddrs_to_user_old(sk, bp->port, cnt = sctp_copy_laddrs_to_user_old(sk, bp->port, getaddrs.addr_num, getaddrs.addr_num, to); to); Loading @@ -4037,10 +4035,9 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; temp.v4.sin_port = htons(temp.v4.sin_port); if (copy_to_user(to, &temp, addrlen)) { if (copy_to_user(to, &temp, addrlen)) { err = -EFAULT; err = -EFAULT; goto unlock; goto unlock; Loading Loading @@ -4113,7 +4110,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, if (sctp_list_single_entry(&bp->address_list)) { if (sctp_list_single_entry(&bp->address_list)) { addr = list_entry(bp->address_list.next, addr = list_entry(bp->address_list.next, struct sctp_sockaddr_entry, list); struct sctp_sockaddr_entry, list); if (sctp_is_any(&addr->a_h)) { if (sctp_is_any(&addr->a)) { cnt = sctp_copy_laddrs_to_user(sk, bp->port, cnt = sctp_copy_laddrs_to_user(sk, bp->port, &to, space_left); &to, space_left); if (cnt < 0) { if (cnt < 0) { Loading @@ -4126,12 +4123,11 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, list_for_each(pos, &bp->address_list) { list_for_each(pos, &bp->address_list) { addr = list_entry(pos, struct sctp_sockaddr_entry, list); addr = list_entry(pos, struct sctp_sockaddr_entry, list); memcpy(&temp, &addr->a_h, sizeof(temp)); memcpy(&temp, &addr->a, sizeof(temp)); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; if(space_left < addrlen) if(space_left < addrlen) return -ENOMEM; /*fixme: right error?*/ return -ENOMEM; /*fixme: right error?*/ temp.v4.sin_port = htons(temp.v4.sin_port); if (copy_to_user(to, &temp, addrlen)) { if (copy_to_user(to, &temp, addrlen)) { err = -EFAULT; err = -EFAULT; goto unlock; goto unlock; Loading