diff options
| author | Vasiliy Kulikov <segooon@gmail.com> | 2010-11-10 13:14:33 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-11-10 13:14:33 -0500 |
| commit | fe10ae53384e48c51996941b7720ee16995cbcb7 (patch) | |
| tree | b5a4332bd71d40a6193bc62d097808abfe62997a | |
| parent | 332dd96f7ac15e937088fe11f15cfe0210e8edd1 (diff) | |
net: ax25: fix information leak to userland
Sometimes ax25_getname() doesn't initialize all members of fsa_digipeater
field of fsa struct, also the struct has padding bytes between
sax25_call and sax25_ndigis fields. This structure is then copied to
userland. It leads to leaking of contents of kernel stack memory.
Signed-off-by: Vasiliy Kulikov <segooon@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/ax25/af_ax25.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 26eaebf4aaa9..bb86d2932394 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c | |||
| @@ -1392,6 +1392,7 @@ static int ax25_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 1392 | ax25_cb *ax25; | 1392 | ax25_cb *ax25; |
| 1393 | int err = 0; | 1393 | int err = 0; |
| 1394 | 1394 | ||
| 1395 | memset(fsa, 0, sizeof(fsa)); | ||
| 1395 | lock_sock(sk); | 1396 | lock_sock(sk); |
| 1396 | ax25 = ax25_sk(sk); | 1397 | ax25 = ax25_sk(sk); |
| 1397 | 1398 | ||
| @@ -1403,7 +1404,6 @@ static int ax25_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 1403 | 1404 | ||
| 1404 | fsa->fsa_ax25.sax25_family = AF_AX25; | 1405 | fsa->fsa_ax25.sax25_family = AF_AX25; |
| 1405 | fsa->fsa_ax25.sax25_call = ax25->dest_addr; | 1406 | fsa->fsa_ax25.sax25_call = ax25->dest_addr; |
| 1406 | fsa->fsa_ax25.sax25_ndigis = 0; | ||
| 1407 | 1407 | ||
| 1408 | if (ax25->digipeat != NULL) { | 1408 | if (ax25->digipeat != NULL) { |
| 1409 | ndigi = ax25->digipeat->ndigi; | 1409 | ndigi = ax25->digipeat->ndigi; |
