Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e9ea574

Browse files
esyr-rhkuba-moo
authored andcommitted
mctp: handle the struct sockaddr_mctp_ext padding field
struct sockaddr_mctp_ext.__smctp_paddin0 has to be checked for being set to zero, otherwise it cannot be utilised in the future. Fixes: 99ce45d ("mctp: Implement extended addressing") Signed-off-by: Eugene Syromiatnikov <[email protected]> Acked-by: Jeremy Kerr <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 1e4b50f commit e9ea574

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

net/mctp/af_mctp.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ static bool mctp_sockaddr_is_ok(const struct sockaddr_mctp *addr)
3939
return !addr->__smctp_pad0 && !addr->__smctp_pad1;
4040
}
4141

42+
static bool mctp_sockaddr_ext_is_ok(const struct sockaddr_mctp_ext *addr)
43+
{
44+
return !addr->__smctp_pad0[0] &&
45+
!addr->__smctp_pad0[1] &&
46+
!addr->__smctp_pad0[2];
47+
}
48+
4249
static int mctp_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
4350
{
4451
struct sock *sk = sock->sk;
@@ -135,7 +142,8 @@ static int mctp_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
135142
DECLARE_SOCKADDR(struct sockaddr_mctp_ext *,
136143
extaddr, msg->msg_name);
137144

138-
if (extaddr->smctp_halen > sizeof(cb->haddr)) {
145+
if (!mctp_sockaddr_ext_is_ok(extaddr) ||
146+
extaddr->smctp_halen > sizeof(cb->haddr)) {
139147
rc = -EINVAL;
140148
goto err_free;
141149
}
@@ -224,6 +232,7 @@ static int mctp_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
224232
msg->msg_namelen = sizeof(*ae);
225233
ae->smctp_ifindex = cb->ifindex;
226234
ae->smctp_halen = cb->halen;
235+
memset(ae->__smctp_pad0, 0x0, sizeof(ae->__smctp_pad0));
227236
memset(ae->smctp_haddr, 0x0, sizeof(ae->smctp_haddr));
228237
memcpy(ae->smctp_haddr, cb->haddr, cb->halen);
229238
}

0 commit comments

Comments
 (0)