From patchwork Tue Jun 7 21:57:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kees Cook X-Patchwork-Id: 9162671 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 13DEE60467 for ; Tue, 7 Jun 2016 21:58:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 05B082832C for ; Tue, 7 Jun 2016 21:58:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EE5622836D; Tue, 7 Jun 2016 21:58:02 +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 3AB942832C for ; Tue, 7 Jun 2016 21:58:02 +0000 (UTC) Received: (qmail 7337 invoked by uid 550); 7 Jun 2016 21:57:51 -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: Reply-To: kernel-hardening@lists.openwall.com Delivered-To: mailing list kernel-hardening@lists.openwall.com Received: (qmail 5763 invoked from network); 7 Jun 2016 21:57:26 -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=dehpJXIZDtIyckJJyI0ghZrNgn2J+qvi4hL+Rkeq04w=; b=mEfsMlRxdt/D/F0aebD24nTtV5nVAzBYwmpTcloigKGvnj6wmuYKgxvIZqF7YBWT+3 dNZ/wxFIAEPtJJ3k1u0xDn3k7BoOXYIgvdIxRURzBeDLEseT9V3ZfjwxgEonxgW92olY ldzAPOIIHm06PJhUbZkZls+T7E8S5B5d7OJFg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dehpJXIZDtIyckJJyI0ghZrNgn2J+qvi4hL+Rkeq04w=; b=AxcmknilRCjX4hV02iHX6oHPp9zf79z7pp0YmlGBDZ1xrKJVHrlJGYS7tsPJdRhX1c HGJflUEieRK3CJPR0lQhpLJICDMDhF3NrPPE8NAjvxik/MWR0oeYrVFTZI4tc8z8yKrJ aEBICtZOmOWZe5LDgNjxdvoAU2cIjMpXAAPQ6i9aw+rHI8NYYV81zjjymEM16uQfeFxq Q153AzH68Y1hTDGly+Zsi95+Qsr7jNV8ZNw7LZiFwwQc1BqCdMd2c1S+x8xXLKeHs+N4 izfwJG+qsGQ2KhzaflMGhGk9o/BDgTEnDnZUSG67Rz+kg/KfMKAz9bgg9NdN0kefxqDE FDWg== X-Gm-Message-State: ALyK8tLvATCfRoCHFiiLKe8NoxccVRqRvFAIKfIM/0ptI/BWrlZYsCkYksslBuBXpSmE01xz X-Received: by 10.98.32.140 with SMTP id m12mr1729831pfj.119.1465336634515; Tue, 07 Jun 2016 14:57:14 -0700 (PDT) From: Kees Cook To: kernel-hardening@lists.openwall.com Cc: Kees Cook , Arnd Bergmann , Greg Kroah-Hartman , Andrew Morton , "David S. Miller" , Mauro Carvalho Chehab , Jiri Slaby , Guenter Roeck , linux-kernel@vger.kernel.org Date: Tue, 7 Jun 2016 14:57:08 -0700 Message-Id: <1465336628-18219-6-git-send-email-keescook@chromium.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1465336628-18219-1-git-send-email-keescook@chromium.org> References: <1465336628-18219-1-git-send-email-keescook@chromium.org> Subject: [kernel-hardening] [PATCH 5/5] lkdtm: split atomic test into over and underflow X-Virus-Scanned: ClamAV using ClamSMTP Each direction of the atomic wrapping should be individually testable. Signed-off-by: Kees Cook --- drivers/misc/lkdtm_core.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/misc/lkdtm_core.c b/drivers/misc/lkdtm_core.c index f212f865f9c6..b5a544f2b645 100644 --- a/drivers/misc/lkdtm_core.c +++ b/drivers/misc/lkdtm_core.c @@ -111,7 +111,8 @@ enum ctype { CT_WRITE_RO, CT_WRITE_RO_AFTER_INIT, CT_WRITE_KERN, - CT_WRAP_ATOMIC, + CT_ATOMIC_UNDERFLOW, + CT_ATOMIC_OVERFLOW, CT_USERCOPY_HEAP_SIZE_TO, CT_USERCOPY_HEAP_SIZE_FROM, CT_USERCOPY_HEAP_FLAG_TO, @@ -160,7 +161,8 @@ static char* cp_type[] = { "WRITE_RO", "WRITE_RO_AFTER_INIT", "WRITE_KERN", - "WRAP_ATOMIC", + "ATOMIC_UNDERFLOW", + "ATOMIC_OVERFLOW", "USERCOPY_HEAP_SIZE_TO", "USERCOPY_HEAP_SIZE_FROM", "USERCOPY_HEAP_FLAG_TO", @@ -894,13 +896,25 @@ static void lkdtm_do_action(enum ctype which) do_overwritten(); break; } - case CT_WRAP_ATOMIC: { + case CT_ATOMIC_UNDERFLOW: { atomic_t under = ATOMIC_INIT(INT_MIN); - atomic_t over = ATOMIC_INIT(INT_MAX); - pr_info("attempting atomic underflow\n"); + pr_info("attempting good atomic increment\n"); + atomic_inc(&under); + atomic_dec(&under); + + pr_info("attempting bad atomic underflow\n"); atomic_dec(&under); - pr_info("attempting atomic overflow\n"); + break; + } + case CT_ATOMIC_OVERFLOW: { + atomic_t over = ATOMIC_INIT(INT_MAX); + + pr_info("attempting good atomic decrement\n"); + atomic_dec(&over); + atomic_inc(&over); + + pr_info("attempting bad atomic overflow\n"); atomic_inc(&over); return;