dccp: fix info leak via getsockopt(DCCP_SOCKOPT_CCID_TX_INFO)
authorMathias Krause <minipli@googlemail.com>
Wed, 15 Aug 2012 11:31:55 +0000 (11:31 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Aug 2012 04:36:31 +0000 (21:36 -0700)
The CCID3 code fails to initialize the trailing padding bytes of struct
tfrc_tx_info added for alignment on 64 bit architectures. It that for
potentially leaks four bytes kernel stack via the getsockopt() syscall.
Add an explicit memset(0) before filling the structure to avoid the
info leak.

Signed-off-by: Mathias Krause <minipli@googlemail.com>
Cc: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dccp/ccids/ccid3.c

index d65e98798ecaff29110a2ff303d500482162df66..119c04317d48eed4abcb2bbf6071062c8d9784fd 100644 (file)
@@ -535,6 +535,7 @@ static int ccid3_hc_tx_getsockopt(struct sock *sk, const int optname, int len,
        case DCCP_SOCKOPT_CCID_TX_INFO:
                if (len < sizeof(tfrc))
                        return -EINVAL;
+               memset(&tfrc, 0, sizeof(tfrc));
                tfrc.tfrctx_x      = hc->tx_x;
                tfrc.tfrctx_x_recv = hc->tx_x_recv;
                tfrc.tfrctx_x_calc = hc->tx_x_calc;