Skip to content

Commit d98985d

Browse files
Wei Yongjundavem330
authored andcommitted
sctp: fix error return code in sctp_sendmsg_new_asoc()
Return error code -EINVAL in the address len check error handling case since 'err' can be overwrite to 0 by 'err = sctp_verify_addr()' in the for loop. Fixes: 2c0dbaa ("sctp: add support for SCTP_DSTADDRV4/6 Information for sendmsg") Signed-off-by: Wei Yongjun <[email protected]> Acked-by: Neil Horman <[email protected]> Reviewed-by: Xin Long <[email protected]> Acked-by: Neil Horman <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7083a45 commit d98985d

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

net/sctp/socket.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,7 +1677,7 @@ static int sctp_sendmsg_new_asoc(struct sock *sk, __u16 sflags,
16771677
struct sctp_association *asoc;
16781678
enum sctp_scope scope;
16791679
struct cmsghdr *cmsg;
1680-
int err = -EINVAL;
1680+
int err;
16811681

16821682
*tp = NULL;
16831683

@@ -1761,16 +1761,20 @@ static int sctp_sendmsg_new_asoc(struct sock *sk, __u16 sflags,
17611761
memset(daddr, 0, sizeof(*daddr));
17621762
dlen = cmsg->cmsg_len - sizeof(struct cmsghdr);
17631763
if (cmsg->cmsg_type == SCTP_DSTADDRV4) {
1764-
if (dlen < sizeof(struct in_addr))
1764+
if (dlen < sizeof(struct in_addr)) {
1765+
err = -EINVAL;
17651766
goto free;
1767+
}
17661768

17671769
dlen = sizeof(struct in_addr);
17681770
daddr->v4.sin_family = AF_INET;
17691771
daddr->v4.sin_port = htons(asoc->peer.port);
17701772
memcpy(&daddr->v4.sin_addr, CMSG_DATA(cmsg), dlen);
17711773
} else {
1772-
if (dlen < sizeof(struct in6_addr))
1774+
if (dlen < sizeof(struct in6_addr)) {
1775+
err = -EINVAL;
17731776
goto free;
1777+
}
17741778

17751779
dlen = sizeof(struct in6_addr);
17761780
daddr->v6.sin6_family = AF_INET6;

0 commit comments

Comments
 (0)