From patchwork Mon Aug 28 21:35:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kees Cook X-Patchwork-Id: 9926327 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 255EA60375 for ; Mon, 28 Aug 2017 21:44:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 18EB0283C7 for ; Mon, 28 Aug 2017 21:44:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0D372287D5; Mon, 28 Aug 2017 21:44:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from mother.openwall.net (mother.openwall.net [195.42.179.200]) by mail.wl.linuxfoundation.org (Postfix) with SMTP id 1171F283C7 for ; Mon, 28 Aug 2017 21:44:43 +0000 (UTC) Received: (qmail 9474 invoked by uid 550); 28 Aug 2017 21:44:07 -0000 Mailing-List: contact kernel-hardening-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Delivered-To: mailing list kernel-hardening@lists.openwall.com Received: (qmail 9234 invoked from network); 28 Aug 2017 21:44:04 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=scumg3JNVPHGJjDUd4NSnoqqNmW0vz4ZMGIz5rytggc=; b=QoCSHok2j4GckM0NXIoA9bnT/MxXZPewyJrLUjrNbRWKyRaBTjPFPJEgyuMBCRGqE9 X1zgEJDuKe6pQCEyB2F0n7CNwj4YshOjgbJTwKTgEtWwrsPlIqhp+6q5lMaTIM6sxhzG IyYGbr1GZ0UoP6CA1G+lS3JGQV3NDgO6dwOTI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=scumg3JNVPHGJjDUd4NSnoqqNmW0vz4ZMGIz5rytggc=; b=NCEBOJkE0eLp8sA1J/MAI7s44r5JPJBuUIr285U3Uz9SAIp6cvyuvrU00ySK8acwz3 6R+umTJolR3DNwZtGxATFjNYOq7/ho/OH9srLX5RIqUFh0hjiXWnz9IP/xLpteQBOQs8 cWZ/C2ZfEVaopDJqx/o/C5rEHXPowbHlVlN+ijpLNdLhgDa/nZYH2S035qZjZfXWT2Ex uzL/8SlaxEljzDp4Nq9KCigJzcUJtk9Pn9H8GHneGswn6yLzUAZIK1s4y9L6kNdIdOYJ vKhobyLYXdpVyDjF1m/343iJrJs2xHHcq3OMk6dd0wWhVXxxOmBo0Z81MoDlWHvNf9ej Sd4A== X-Gm-Message-State: AHYfb5g7BI3EzS6pkCofjLbuEvoqbslBrGqY9cJnSdeyiGrMvg39y9xm KSFnIMRda54rryUj X-Received: by 10.99.113.84 with SMTP id b20mr1949069pgn.222.1503956633108; Mon, 28 Aug 2017 14:43:53 -0700 (PDT) From: Kees Cook To: linux-kernel@vger.kernel.org Cc: Kees Cook , "David S. Miller" , Eric Dumazet , Paolo Abeni , David Howells , netdev@vger.kernel.org, linux-mm@kvack.org, kernel-hardening@lists.openwall.com, David Windsor Date: Mon, 28 Aug 2017 14:35:04 -0700 Message-Id: <1503956111-36652-24-git-send-email-keescook@chromium.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503956111-36652-1-git-send-email-keescook@chromium.org> References: <1503956111-36652-1-git-send-email-keescook@chromium.org> Subject: [kernel-hardening] [PATCH v2 23/30] net: Restrict unwhitelisted proto caches to size 0 X-Virus-Scanned: ClamAV using ClamSMTP Now that protocols have been annotated (the copy of icsk_ca_ops->name is of an ops field from outside the slab cache): $ git grep 'copy_.*_user.*sk.*->' caif/caif_socket.c: copy_from_user(&cf_sk->conn_req.param.data, ov, ol)) { ipv4/raw.c: if (copy_from_user(&raw_sk(sk)->filter, optval, optlen)) ipv4/raw.c: copy_to_user(optval, &raw_sk(sk)->filter, len)) ipv4/tcp.c: if (copy_to_user(optval, icsk->icsk_ca_ops->name, len)) ipv4/tcp.c: if (copy_to_user(optval, icsk->icsk_ulp_ops->name, len)) ipv6/raw.c: if (copy_from_user(&raw6_sk(sk)->filter, optval, optlen)) ipv6/raw.c: if (copy_to_user(optval, &raw6_sk(sk)->filter, len)) sctp/socket.c: if (copy_from_user(&sctp_sk(sk)->subscribe, optval, optlen)) sctp/socket.c: if (copy_to_user(optval, &sctp_sk(sk)->subscribe, len)) sctp/socket.c: if (copy_to_user(optval, &sctp_sk(sk)->initmsg, len)) we can switch the default proto usercopy region to size 0. Any protocols needing to add whitelisted regions must annotate the fields with the useroffset and usersize fields of struct proto. This patch is modified from Brad Spengler/PaX Team's PAX_USERCOPY whitelisting code in the last public patch of grsecurity/PaX based on my understanding of the code. Changes or omissions from the original code are mine and don't reflect the original grsecurity/PaX code. Cc: "David S. Miller" Cc: Eric Dumazet Cc: Paolo Abeni Cc: David Howells Cc: netdev@vger.kernel.org Signed-off-by: Kees Cook --- net/core/sock.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/core/sock.c b/net/core/sock.c index 02dab98ca3e3..c7d0afa1d0b1 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -3112,9 +3112,7 @@ int proto_register(struct proto *prot, int alloc_slab) prot->slab = kmem_cache_create_usercopy(prot->name, prot->obj_size, 0, SLAB_HWCACHE_ALIGN | prot->slab_flags, - prot->usersize ? prot->useroffset : 0, - prot->usersize ? prot->usersize - : prot->obj_size, + prot->useroffset, prot->usersize, NULL); if (prot->slab == NULL) {