Loading net/sctp/bind_addr.c +10 −6 Original line number Diff line number Diff line Loading @@ -155,15 +155,15 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, if (!addr) return -ENOMEM; memcpy(&addr->a_h, new, sizeof(*new)); memcpy(&addr->a, new, sizeof(*new)); /* Fix up the port if it has not yet been set. * Both v4 and v6 have the port at the same offset. */ if (!addr->a_h.v4.sin_port) addr->a_h.v4.sin_port = bp->port; if (!addr->a.v4.sin_port) addr->a.v4.sin_port = htons(bp->port); flip_to_n(&addr->a, &addr->a_h); flip_to_h(&addr->a_h, &addr->a); addr->use_as_src = use_as_src; Loading Loading @@ -264,6 +264,7 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, int retval = 0; int len; struct sctp_af *af; union sctp_addr tmp; /* Convert the raw address to standard address format */ while (addrs_len) { Loading @@ -278,7 +279,8 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, } af->from_addr_param(&addr, rawaddr, port, 0); retval = sctp_add_bind_addr(bp, &addr, 1, gfp); flip_to_n(&tmp, &addr); retval = sctp_add_bind_addr(bp, &tmp, 1, gfp); if (retval) { /* Can't finish building the list, clean up. */ sctp_bind_addr_clean(bp); Loading Loading @@ -358,6 +360,8 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest, int flags) { int error = 0; union sctp_addr tmp; flip_to_n(&tmp, addr); if (sctp_is_any(addr)) { error = sctp_copy_local_addr_list(dest, scope, gfp, flags); Loading @@ -371,7 +375,7 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest, (((AF_INET6 == addr->sa.sa_family) && (flags & SCTP_ADDR6_ALLOWED) && (flags & SCTP_ADDR6_PEERSUPP)))) error = sctp_add_bind_addr(dest, addr, 1, gfp); error = sctp_add_bind_addr(dest, &tmp, 1, gfp); } return error; Loading net/sctp/protocol.c +1 −1 Original line number Diff line number Diff line Loading @@ -234,7 +234,7 @@ int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope, (((AF_INET6 == addr->a_h.sa.sa_family) && (copy_flags & SCTP_ADDR6_ALLOWED) && (copy_flags & SCTP_ADDR6_PEERSUPP)))) { error = sctp_add_bind_addr(bp, &addr->a_h, 1, error = sctp_add_bind_addr(bp, &addr->a, 1, GFP_ATOMIC); if (error) goto end_copy; Loading net/sctp/sm_make_chunk.c +3 −1 Original line number Diff line number Diff line Loading @@ -1507,7 +1507,9 @@ struct sctp_association *sctp_unpack_cookie( /* Also, add the destination address. */ if (list_empty(&retval->base.bind_addr.address_list)) { sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, 1, union sctp_addr tmp; flip_to_n(&tmp, &chunk->dest); sctp_add_bind_addr(&retval->base.bind_addr, &tmp, 1, GFP_ATOMIC); } Loading net/sctp/socket.c +1 −4 Original line number Diff line number Diff line Loading @@ -313,7 +313,6 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) struct sctp_af *af; unsigned short snum; int ret = 0; union sctp_addr tmp; /* Common sockaddr verification. */ af = sctp_sockaddr_af(sp, addr, len); Loading Loading @@ -369,8 +368,7 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) sctp_write_lock(&ep->base.addr_lock); /* Use GFP_ATOMIC since BHs are disabled. */ flip_to_h(&tmp, addr); ret = sctp_add_bind_addr(bp, &tmp, 1, GFP_ATOMIC); ret = sctp_add_bind_addr(bp, addr, 1, GFP_ATOMIC); sctp_write_unlock(&ep->base.addr_lock); sctp_local_bh_enable(); Loading Loading @@ -572,7 +570,6 @@ static int sctp_send_asconf_add_ip(struct sock *sk, addr = (union sctp_addr *)addr_buf; af = sctp_get_af_specific(addr->v4.sin_family); memcpy(&saveaddr, addr, af->sockaddr_len); saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port); retval = sctp_add_bind_addr(bp, &saveaddr, 0, GFP_ATOMIC); addr_buf += af->sockaddr_len; Loading Loading
net/sctp/bind_addr.c +10 −6 Original line number Diff line number Diff line Loading @@ -155,15 +155,15 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, if (!addr) return -ENOMEM; memcpy(&addr->a_h, new, sizeof(*new)); memcpy(&addr->a, new, sizeof(*new)); /* Fix up the port if it has not yet been set. * Both v4 and v6 have the port at the same offset. */ if (!addr->a_h.v4.sin_port) addr->a_h.v4.sin_port = bp->port; if (!addr->a.v4.sin_port) addr->a.v4.sin_port = htons(bp->port); flip_to_n(&addr->a, &addr->a_h); flip_to_h(&addr->a_h, &addr->a); addr->use_as_src = use_as_src; Loading Loading @@ -264,6 +264,7 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, int retval = 0; int len; struct sctp_af *af; union sctp_addr tmp; /* Convert the raw address to standard address format */ while (addrs_len) { Loading @@ -278,7 +279,8 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, } af->from_addr_param(&addr, rawaddr, port, 0); retval = sctp_add_bind_addr(bp, &addr, 1, gfp); flip_to_n(&tmp, &addr); retval = sctp_add_bind_addr(bp, &tmp, 1, gfp); if (retval) { /* Can't finish building the list, clean up. */ sctp_bind_addr_clean(bp); Loading Loading @@ -358,6 +360,8 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest, int flags) { int error = 0; union sctp_addr tmp; flip_to_n(&tmp, addr); if (sctp_is_any(addr)) { error = sctp_copy_local_addr_list(dest, scope, gfp, flags); Loading @@ -371,7 +375,7 @@ static int sctp_copy_one_addr(struct sctp_bind_addr *dest, (((AF_INET6 == addr->sa.sa_family) && (flags & SCTP_ADDR6_ALLOWED) && (flags & SCTP_ADDR6_PEERSUPP)))) error = sctp_add_bind_addr(dest, addr, 1, gfp); error = sctp_add_bind_addr(dest, &tmp, 1, gfp); } return error; Loading
net/sctp/protocol.c +1 −1 Original line number Diff line number Diff line Loading @@ -234,7 +234,7 @@ int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope, (((AF_INET6 == addr->a_h.sa.sa_family) && (copy_flags & SCTP_ADDR6_ALLOWED) && (copy_flags & SCTP_ADDR6_PEERSUPP)))) { error = sctp_add_bind_addr(bp, &addr->a_h, 1, error = sctp_add_bind_addr(bp, &addr->a, 1, GFP_ATOMIC); if (error) goto end_copy; Loading
net/sctp/sm_make_chunk.c +3 −1 Original line number Diff line number Diff line Loading @@ -1507,7 +1507,9 @@ struct sctp_association *sctp_unpack_cookie( /* Also, add the destination address. */ if (list_empty(&retval->base.bind_addr.address_list)) { sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, 1, union sctp_addr tmp; flip_to_n(&tmp, &chunk->dest); sctp_add_bind_addr(&retval->base.bind_addr, &tmp, 1, GFP_ATOMIC); } Loading
net/sctp/socket.c +1 −4 Original line number Diff line number Diff line Loading @@ -313,7 +313,6 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) struct sctp_af *af; unsigned short snum; int ret = 0; union sctp_addr tmp; /* Common sockaddr verification. */ af = sctp_sockaddr_af(sp, addr, len); Loading Loading @@ -369,8 +368,7 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) sctp_write_lock(&ep->base.addr_lock); /* Use GFP_ATOMIC since BHs are disabled. */ flip_to_h(&tmp, addr); ret = sctp_add_bind_addr(bp, &tmp, 1, GFP_ATOMIC); ret = sctp_add_bind_addr(bp, addr, 1, GFP_ATOMIC); sctp_write_unlock(&ep->base.addr_lock); sctp_local_bh_enable(); Loading Loading @@ -572,7 +570,6 @@ static int sctp_send_asconf_add_ip(struct sock *sk, addr = (union sctp_addr *)addr_buf; af = sctp_get_af_specific(addr->v4.sin_family); memcpy(&saveaddr, addr, af->sockaddr_len); saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port); retval = sctp_add_bind_addr(bp, &saveaddr, 0, GFP_ATOMIC); addr_buf += af->sockaddr_len; Loading