|
@@ -237,23 +237,19 @@ int sctp_copy_local_addr_list(struct net *net, struct sctp_bind_addr *bp,
|
|
static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
|
|
static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
|
|
int is_saddr)
|
|
int is_saddr)
|
|
{
|
|
{
|
|
- void *from;
|
|
|
|
- __be16 *port;
|
|
|
|
- struct sctphdr *sh;
|
|
|
|
|
|
+ /* Always called on head skb, so this is safe */
|
|
|
|
+ struct sctphdr *sh = sctp_hdr(skb);
|
|
|
|
+ struct sockaddr_in *sa = &addr->v4;
|
|
|
|
|
|
- port = &addr->v4.sin_port;
|
|
|
|
addr->v4.sin_family = AF_INET;
|
|
addr->v4.sin_family = AF_INET;
|
|
|
|
|
|
- /* Always called on head skb, so this is safe */
|
|
|
|
- sh = sctp_hdr(skb);
|
|
|
|
if (is_saddr) {
|
|
if (is_saddr) {
|
|
- *port = sh->source;
|
|
|
|
- from = &ip_hdr(skb)->saddr;
|
|
|
|
|
|
+ sa->sin_port = sh->source;
|
|
|
|
+ sa->sin_addr.s_addr = ip_hdr(skb)->saddr;
|
|
} else {
|
|
} else {
|
|
- *port = sh->dest;
|
|
|
|
- from = &ip_hdr(skb)->daddr;
|
|
|
|
|
|
+ sa->sin_port = sh->dest;
|
|
|
|
+ sa->sin_addr.s_addr = ip_hdr(skb)->daddr;
|
|
}
|
|
}
|
|
- memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/* Initialize an sctp_addr from a socket. */
|
|
/* Initialize an sctp_addr from a socket. */
|