From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932356AbcEFMpO (ORCPT ); Fri, 6 May 2016 08:45:14 -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 S1757949AbcEFMpL (ORCPT ); Fri, 6 May 2016 08:45:11 -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 3/4] mm/kasan: add API to check memory regions Date: Fri, 6 May 2016 15:45:21 +0300 Message-ID: <1462538722-1574-3-git-send-email-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1462538722-1574-1-git-send-email-aryabinin@virtuozzo.com> References: <1462538722-1574-1-git-send-email-aryabinin@virtuozzo.com> 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: b4a91515-bb66-4c93-0282-08d375ac410d X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;2:imuP4zTwwM2STczT4xG09yd8iHvkGM3uegiwRVK+8YkrTrrkgUK2bXlcvrKRnopynhg6Tu2nBw4SjwEl5bAZuR9qSNiowOHQqE1F1w3BngCZlzMHwxRPuTmTONLXn5pUxxwv78LwRRNNeXwcbsh/Xg+t34jgDpRoddtU5kkWNwoSNWvbIXwqgX1BEm2zTSm5;3:Akeb719yiqLeVvfH2tG6uh+qPfOBFFzz5cgSneG3Fp5FTZBEeihHsmCbkCZqusqej/Tb8M+6PneQnyrckDH7NAVi+i/TXioczh2aCzEE+C7Bug265z+E47ceUq57mww9;25:gcOc3mJIVD2OAobCgrNsPeIxM+TOTGSOU4IAybnoxx3lp5d9cnJgc/YP3nZPYE1V9osSS1rcno2WY5BY28Ag8g+PiRvMG66d17b9AU+c8CdiVQ2tp7o6dAHFtO0WVNqd1ee7xVN/JdZEm1MuYg6mGIXK4zejl5GNnNfGIh4AVi+b0u7hTtXGj4T0k5G/V5flUHy+NV6AmaOYpHeRFwjPCxecQIUj+PA2cTNxi+S9mYmmdslgam7MIOvG1Kuq/+GWpSeSmTsqe+swSw6ZapYGnabviST/ebYhrcduFiMFvO1mFmvsmaAmToBYwsg/3ODHSp5l2Gfp9CAtBBUDrxsBv5fKOUSTF+RHhngxZ7n8A9+htn1RqOnnHHr4zgnIgTssHkXzKeW8pT55oUl/rHvzoXvHDcV4cij3YhkohKYqD0EeGC1ZKmRnoGKmNakXa7QG X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1303; 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:DiUFtzxxJGnNCqFw2wXUUp4hxZoZr65hugqOiVwluj4/JF+NhWYzek4PXGYUA56eSC6ZtyCIKED1YhKvbIZ7vszPsNnEJ5QtXTRLG5Dd6lG0eWqeJDnCP/eqY3Z41zA+lKtM2fy8/BIsv/iBDKSBqmp196ZbOXJT5gERaQvxNMeCrUK8R01sdkWbU0mjg9RJyhNNpMtt4T0dndBM0jrrVSkyMI4LMxQ3pvKsr0Fsi4a9bwHN3b+4OHTJIgZIr862vogkamXdKu0JS82Q5a1hQWhwrwU+kYvxMqdRLSCkpIVnJid1LnNDtCY7shs0+vjUfKYlTm+XnQ7+M9GK5g/7wzmNB8KtLT/7gF8z3k2S9Smrh8b5mdCqxKysx/wbrqT/ZA91820mSobCDJamGIfrAM4+VyIHuDKZwGnIUMn6ZI4= X-Forefront-PRVS: 09347618C4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(33646002)(5008740100001)(2950100001)(47776003)(66066001)(2906002)(4326007)(92566002)(50226002)(77096005)(5004730100002)(110136002)(48376002)(76176999)(50986999)(19580405001)(586003)(50466002)(6116002)(42186005)(36756003)(189998001)(19580395003)(5003940100001)(575784001)(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:aVMBEnP3ZXkTbINDzuVeqYKfbI0ylXq0bMjfqqIJnhaqo6qQJBQJEnWo+tkWtyoT6+9wml0X33Z/ntfhdbDWakyG14MM3DIXxAqZu1DRo3GPrUspOqNshk49oWqEHrSsn+x2DYLh+TUjiGPmziUzxbPUHx7GtxyYDH0FE/ONPz4UA/jE47fnRLchUKen4/GP4hHPgOFgMu1je3x2B+LnIYqZMSoUDgZ4yQ3S6UL4njyPZVATiGadll02+A2y692BKUfWdZLNcABcnGBr4HgFzhPQ0PwnE1GdOK0sgCdL4SlivavKMmYhPXZhrc0+4dvjP69ShSs5m68IUWhSswSsU5dbeF6syIk/dqb9Mcw459zCpYUC4IXBhoplfT5m5IubQHK2tuMQjvdHYCGR/+MxRIacYZGaF1ChDgddy7L/F30xCp8uPgzfTLNqCDnnMru7WPwMrWbdhhyUjBg6/p5uF++IBlpbs/fjA1KspAmzYpHf8P/Yptkct6KuY8+fpIU6eslNqMugf1ESuiMzl3zOJIn2G3AD/EIJoYbEnaFvY5oL2h/Wx9JMXKpKGbbbERq/G2lIkks1lxrfiF5j1eNQxrpLQSgk/MMN1Erq3EFkgmDqZWVMcrAUvl3c9cNi2++bnuPXTnD2wEAV1/yz4CK797nuW5zjmIfOmAeFqNufkBjgtRU+0+Amss4zgxLxcmWTQHCoGXPl2eSwgUZe/wVMhqK2grrS18AyTh4WCHpbE96Wc3uE03qoYEDmvVD2YkSSeb+htqraoMwZUZCd0PbY4F4ncP8pJfy4iuP4HtE6MUqDXY6AUIyfTzPtape+DXLI0Yg0XM/CRJ0hiarrPgTx40vjWY+r8QbE2utEucpzl9/qIBz2sgcCWoFOkpF4oQEVdOJtYHutyY434WOH8lLFk4o7Z1gCuqgcqSh5droEmKUVVMM65lVKxFmJ10EQGsKH X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;5:m4vMF22wY1+1fHRFsFVqrrCfE6WYMav9/gSxfjSIwqa+wMP5XDnkAYRuxsi5p+n1RyuqEUWoZn3t+FUiHNzCIcnLPcoXM9n+e6x3qmPPfMiPNdMv7AzKH1u3FWoMU5yTjYMfH3b9CwNviNsSY5WnBQ==;24:ClHPInYE4+wY/NVX2Kl6mBrAUj+5APAYh71nm/KTXXhvJ/2oPwehIXuhaW5qcHdUH71cbf/bRJNPg62kJ9pT4bEeEaPzdadlZEicsgE3HgM=;7:SQQwLiqsouDLZZ4aobQW692BfbSg1jir8FuYaLQD4gYRbjCLmq5jNeSmOlr7KcLgvjTkHOJmzBqHSrLSPJH3EPcvCsRhe0ywmHQ5traCNL6ib7JBlcg4hgtIi/eNx51B03xDPojER56bGBkK4sI7ddSjlMZo/PvEcxjRGDtA1qL3JymY8CRMHen5VjITyX/m;20:qmzEbtEXhuzdRbxm9CbHedb5+bm4pH5j7Uh2yp1blRDJPEIJyjLclYvCyc/uexgBUKNweBUYpuH9Igx9VM+6ifoL9XInGzfKvQ/kXjT7pnHRpTab04vS7j43MM+S1r/SLk+seNOV+B74XdLAmTImWh8U1rBDKdkKYWPUNmFd3WE= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2016 12:45:06.9005 (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 Memory access coded in an assembly won't be seen by KASAN as a compiler can instrument only C code. Add kasan_check_[read,write]() API which is going to be used to check a certain memory range. Signed-off-by: Andrey Ryabinin Cc: Alexander Potapenko Cc: Dmitry Vyukov --- MAINTAINERS | 2 +- include/linux/kasan-checks.h | 12 ++++++++++++ mm/kasan/kasan.c | 12 ++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 include/linux/kasan-checks.h diff --git a/MAINTAINERS b/MAINTAINERS index 43b85c1..3a9471c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6363,7 +6363,7 @@ S: Maintained F: arch/*/include/asm/kasan.h F: arch/*/mm/kasan_init* F: Documentation/kasan.txt -F: include/linux/kasan.h +F: include/linux/kasan*.h F: lib/test_kasan.c F: mm/kasan/ F: scripts/Makefile.kasan diff --git a/include/linux/kasan-checks.h b/include/linux/kasan-checks.h new file mode 100644 index 0000000..b7f8ace --- /dev/null +++ b/include/linux/kasan-checks.h @@ -0,0 +1,12 @@ +#ifndef _LINUX_KASAN_CHECKS_H +#define _LINUX_KASAN_CHECKS_H + +#ifdef CONFIG_KASAN +void kasan_check_read(const void *p, unsigned int size); +void kasan_check_write(const void *p, unsigned int size); +#else +static inline void kasan_check_read(const void *p, unsigned int size) { } +static inline void kasan_check_write(const void *p, unsigned int size) { } +#endif + +#endif diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c index 6e4072c..54f0ea7 100644 --- a/mm/kasan/kasan.c +++ b/mm/kasan/kasan.c @@ -299,6 +299,18 @@ static void check_memory_region(unsigned long addr, check_memory_region_inline(addr, size, write, ret_ip); } +void kasan_check_read(const void *p, unsigned int size) +{ + check_memory_region((unsigned long)p, size, false, _RET_IP_); +} +EXPORT_SYMBOL(kasan_check_read); + +void kasan_check_write(const void *p, unsigned int size) +{ + check_memory_region((unsigned long)p, size, true, _RET_IP_); +} +EXPORT_SYMBOL(kasan_check_write); + #undef memset void *memset(void *addr, int c, size_t len) { -- 2.7.3