mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 12:57:06 +09:00
econet: disallow NULL remote addr for sendmsg(), fixes CVE-2010-3849
commit fa0e846494 upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
04c54f3ac5
commit
72013721bd
@@ -296,23 +296,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];
|
||||
@@ -350,7 +341,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;
|
||||
|
||||
Reference in New Issue
Block a user