From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758706AbcEFMpK (ORCPT ); Fri, 6 May 2016 08:45:10 -0400 Received: from mail-am1on0101.outbound.protection.outlook.com ([157.56.112.101]:37636 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1757949AbcEFMpH (ORCPT ); Fri, 6 May 2016 08:45:07 -0400 Authentication-Results: linux-foundation.org; dkim=none (message not signed) header.d=none;linux-foundation.org; dmarc=none action=none header.from=virtuozzo.com; From: Andrey Ryabinin To: Andrew Morton CC: , , , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov Subject: [PATCH 1/4] kasan/tests: add tests for user memory access functions Date: Fri, 6 May 2016 15:45:19 +0300 Message-ID: <1462538722-1574-1-git-send-email-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.7.3 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM3PR07CA0025.eurprd07.prod.outlook.com (10.141.45.153) To DB6PR0801MB1303.eurprd08.prod.outlook.com (10.168.11.21) X-MS-Office365-Filtering-Correlation-Id: 803d943b-4515-4056-2f33-08d375ac3e95 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;2:UYcvXaglzXFJt1Oi1gjk/qjdvkQTAYXldKVXhhqiAJqUCHRugdguMbcJl5Ae2xa4ta9NRJ482MAcg9jjdId++csx2G1RHg/eDeLgOVeLYVoW6yqC8zBe+Omoj/hRKGOcJgDLc56/VeokPnzk6dUgnq+/NzcPxQEMSbQio3YEwOzu5u9dIrqpNSVnnd9JWlMI;3:VKDjf6kaX0ye4IMyU2KsoahBfjaq0Qd46W81fMtP8LjokEn76eSgtWnBuuaA/F3Wv5rhwoj/LjWf6jaTUsFi8qW34wmbn0/Tj9MNjf3LfNGMVhaXER/c8yft131Mws7Z X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1303; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;25:9zJmrCqvrd5WZLDfazb45ONgnW0hjXaYaLpve3DZKyWTxJ82Sp0R2YvKOKVGNkzNVzS9/fL//BMzbj636vpvqRM3F3NaSp9ZIGuo7Mr9VxHzu8MOGm7wjCWGN/DvDlVRestc8LGvhmZ37WiwudsWhSFNeiXqvnMPF77PxVdRXQ6z2E2eiyC/8SHHnXzojX9jJsLUl6zfgshcSe9rBqeRbFEYjFU1rECTtA5F+WuVUrhWxCUxwExf2XvMV67cPzEAPMpWQEg2WzqKdHcH3Xxyu+y7TTkrFp4W9Slk/kwafqEaZOqkiKPDX/Y3YbFLbTBeRX5CHhWMIQi+6MHH9CYC5+1bVb5I4/upOuWT8dpQTGYrE12ZfxK1QCpaIRglebGaN5x1gVxd1bzKT4jd260wFzNW3cWV/hD15GopaJHvBpTdwIW1KjgaTsUojmHsTA1y4ALF5Yxd0VWB1VMJ8tICkuceZhf4sqc05ayVNmwscI8UxNJLRbLjVj5X4gX8JqTyK4XsQMqeSKa8qJVqBH1Q1GWM0IO4LfjT7cgB4e+eZAskYzl7G8DremN024tQ5+RhLhFfdD0utLC0IX3js2VPf3A2nVXnFNSC7xpFtoCdRil6UYXlBPpVneu7PMMtqALi25Up+VZMwctNJPbOQktlBHs3ch+pIziRBMhlYeRtDMHDCuEvJAThrrahTZxyEb4tURbaxT2eb9X2kn3FjEpJGjaPUCQowrhk+N5Chc7BssrslMhAkp0ihkqefas+3pxglPWtM77jGnTBQIbPKcKolQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041072)(6043046);SRVR:DB6PR0801MB1303;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1303; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;4:7I5junj4EOeYnYwdBG6Nl+HO29jmV371hhM1N059n4ONUXsUJwq0CqtAiDKevY9EGwVHh6eIHxt975vCimX2xWnTo/lhgPToqefrpgYI1fdAeAjlxwdBKIGxGfCF5nnTwSZyaLHiiqbGjTSSSdS4m+ufVEytnYSkjYq2IIrRGQ1nw96NOxscdIRQm0FeyZGlTqM6QcMoXkdmtSnUN37ir6/QwJledGUHxff8woXc+vlqaKK6AvsoK2/phC5Ms14pJZ6iuY6uEcCGKUF7y/kPO66c6zb5NRZcOSluocq3Qli12hX81gpT5c4ss3P+o+PbiCWzaMPVSjFJvkAENf96hqTNGLhRXaISYz6uznyhzdnT+TswU7U1wWeDgJSQI0Jv1LLUwAbCmMU83L7UVWITcmjlw+1irauyqchtZ2qn2UY= X-Forefront-PRVS: 09347618C4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(33646002)(5008740100001)(47776003)(66066001)(2906002)(4326007)(92566002)(50226002)(77096005)(5004730100002)(110136002)(48376002)(50986999)(19580405001)(586003)(50466002)(6116002)(42186005)(36756003)(189998001)(19580395003)(5003940100001)(86362001)(229853001)(81166005)(3846002)(53416004)(76506005);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1303;H:localhost.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;23:YculOoHMiI/cQImCv75fefNaFJCjh0gEokUAkAgB+PSH1mmHOUHWG6USXpDyzB/ABjqEvCMZhXzI7yzeVkO0ylg5mbpsKfJAeuVeSpPcP7zI/9GnxKudf84TEEx2NirdsWa5JL7ZxgsVothXxek5zSUaAm3uqbuCaGyx3m2QLRPHvN44PD8wQoXtt/k5GJxXo2CJGLCLsk03SK3v9gXUDATGqHDerllVrkVQmjqGTSfYQe2809IJy5Iep+Wl/l3ySWFlqgWUJFcukbB9z7NBrAnCXXrPX0UHerkCfscwjE6r3EQ7x4YSG3n7GjTBzL5woXkkiK/K1+Zg3VyAm7u4WewmhbYzFZmFZxzXJqIulL8GOkBmIfYdOMa04yUGSCSSZRKP8341wxRdbqUblyPKRJEI+EM79SGZal0tTQxXj7gFr+zwK+DZ5krtKntp4tD6uFvtqfwSkwqlvRgVZQJmxVcraSHzICLF7VUTsuyEBMLe1/LcMFD9fDjskhOioFz8YNxk2bZ9i25JOSK4LQnXQZMKlKRD6SSFaJYnUu/EYBxGjx+glwhHPQLBrQQ9wYtrozWxB5E8ehSW/tdZZkHmbMx48alsV+fasmm0BC5wWNajv2GLfMbzQE54EC3IUjf/Zta4Brf9EDrHxvPdC2D8ekGoD8mC698aJ6Co2L7WJhob+sQR+NA5FSwG73Z4qt2o68xgaIs4HyG1lA3YyI3+hj/i71vEkpZf2qhiuEr67DdLn7frUdNjEn3Vmqaz0NXoVx0YVCcIZaUOqBx74LVbRGtgSbx6yEuF+v5MgN47LoCUMml6kTMBjbL4Ags9cDb9nMv5uo0z2y0bjXxEiMmiVyIa9RicSetBqsoHZT7B4gA= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;5:iNP+6CULzJnq4wKa+RHq+reFC68GrW/unIDcscGiuJwztATIHBsI1MUq4Gy3MmVqq73qkBzdqeMmUB/gKKxf4vs2CnRle55yD++a4zBMDp82On2lmBr3dMuosDsVoEDlg8OHaiXJEp0HrkpSsNic5w==;24:b/Zf1C+x+vt6kqzhHUZ0tbRttblz06P7aZd6kEd14geJm+YBZxTH13ThgDXkiI7YPxluhdOZj/ukmLrZXnR1RVR0CsbnOSzs76lX02mnZEI=;7:1ZQqlYT3MtB3LpnAN4vEuBuk5oU0D9fJ6XeLY9LyceelrgNl1BAQ8EuxeCFMC4C1KKc0YMUX1hBxzhcJtHwd5KMRzyj4qyO6Ndh3r4gjWJxqKkE0To8gIlmog3gNE7t9kyb/oYPhy6L1xYGi2qGKzX3Umz9I1zj/UxGPH7lLRBwsoguILmpSgX02uhONfqpf;20:IeHCWX1UocmkIL5O/ExhvG5PDh1jYR+uidMq0WuFkMH5/3Tpp4cX+dvaVTrqCyUTbMkr2XPqIcs18l9gSIiO8Zf1mNpulJnyMFTg6hukjwq1MDltaLaFk8fwcybQ14C7dvLfRzbf3VcmM3Rv0u+/xmlKYQqBWX6Dh7H7AoYSrdI= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2016 12:45:02.6191 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1303 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds some tests for user memory access API. KASAN doesn't pass these tests yet, but follow on patches will fix that. Signed-off-by: Andrey Ryabinin Cc: Alexander Potapenko Cc: Dmitry Vyukov --- lib/test_kasan.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/lib/test_kasan.c b/lib/test_kasan.c index bd75a03..c640fdb 100644 --- a/lib/test_kasan.c +++ b/lib/test_kasan.c @@ -12,9 +12,12 @@ #define pr_fmt(fmt) "kasan test: %s " fmt, __func__ #include +#include +#include #include #include #include +#include #include static noinline void __init kmalloc_oob_right(void) @@ -389,6 +392,51 @@ static noinline void __init ksize_unpoisons_memory(void) kfree(ptr); } +static noinline void __init copy_user_test(void) +{ + char *kmem; + char __user *usermem; + size_t size = 10; + int unused; + + kmem = kmalloc(size, GFP_KERNEL); + if (!kmem) + return; + + usermem = (char __user *)vm_mmap(NULL, 0, PAGE_SIZE, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_ANONYMOUS | MAP_PRIVATE, 0); + if (IS_ERR(usermem)) { + pr_err("Failed to allocate user memory\n"); + kfree(kmem); + return; + } + + pr_info("out-of-bounds in copy_from_user()\n"); + unused = copy_from_user(kmem, usermem, size + 1); + + pr_info("out-of-bounds in copy_to_user()\n"); + unused = copy_to_user(usermem, kmem, size + 1); + + pr_info("out-of-bounds in __copy_from_user()\n"); + unused = __copy_from_user(kmem, usermem, size + 1); + + pr_info("out-of-bounds in __copy_to_user()\n"); + unused = __copy_to_user(usermem, kmem, size + 1); + + pr_info("out-of-bounds in __copy_from_user_inatomic()\n"); + unused = __copy_from_user_inatomic(kmem, usermem, size + 1); + + pr_info("out-of-bounds in __copy_to_user_inatomic()\n"); + unused = __copy_to_user_inatomic(usermem, kmem, size + 1); + + pr_info("out-of-bounds in strncpy_from_user()\n"); + unused = strncpy_from_user(kmem, usermem, size + 1); + + vm_munmap((unsigned long)usermem, PAGE_SIZE); + kfree(kmem); +} + static int __init kmalloc_tests_init(void) { kmalloc_oob_right(); @@ -416,6 +464,7 @@ static int __init kmalloc_tests_init(void) kasan_quarantine_cache(); #endif ksize_unpoisons_memory(); + copy_user_test(); return -EAGAIN; } -- 2.7.3