Skip to content

Commit

Permalink
econet: disallow NULL remote addr for sendmsg(), fixes CVE-2010-3849
Browse files Browse the repository at this point in the history
Later parts of econet_sendmsg() rely on saddr != NULL, so return early
with EINVAL if NULL was passed otherwise an oops may occur.

Signed-off-by: Phil Blundell <philb@gnu.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Phil Blundell authored and David S. Miller committed Nov 24, 2010
1 parent c39508d commit fa0e846
Showing 1 changed file with 8 additions and 18 deletions.
26 changes: 8 additions & 18 deletions net/econet/af_econet.c
Original file line number Diff line number Diff line change
Expand Up @@ -297,23 +297,14 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,

mutex_lock(&econet_mutex);

if (saddr == NULL) {
struct econet_sock *eo = ec_sk(sk);

addr.station = eo->station;
addr.net = eo->net;
port = eo->port;
cb = eo->cb;
} else {
if (msg->msg_namelen < sizeof(struct sockaddr_ec)) {
mutex_unlock(&econet_mutex);
return -EINVAL;
}
addr.station = saddr->addr.station;
addr.net = saddr->addr.net;
port = saddr->port;
cb = saddr->cb;
}
if (saddr == NULL || msg->msg_namelen < sizeof(struct sockaddr_ec)) {
mutex_unlock(&econet_mutex);
return -EINVAL;
}
addr.station = saddr->addr.station;
addr.net = saddr->addr.net;
port = saddr->port;
cb = saddr->cb;

/* Look for a device with the right network number. */
dev = net2dev_map[addr.net];
Expand Down Expand Up @@ -351,7 +342,6 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,

eb = (struct ec_cb *)&skb->cb;

/* BUG: saddr may be NULL */
eb->cookie = saddr->cookie;
eb->sec = *saddr;
eb->sent = ec_tx_done;
Expand Down

0 comments on commit fa0e846

Please sign in to comment.