From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755567AbcHVNRH (ORCPT ); Mon, 22 Aug 2016 09:17:07 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:60308 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755013AbcHVNRF (ORCPT ); Mon, 22 Aug 2016 09:17:05 -0400 From: Arnd Bergmann To: Kees Cook Cc: "Paul E . McKenney" , Laura Abbott , Steven Rostedt , Daniel Micay , Joe Perches , Stephen Boyd , Syed Rameez Mustafa , Greg Kroah-Hartman , Josh Triplett , Mathieu Desnoyers , Lai Jiangshan , "Aneesh Kumar K.V" , "Kirill A. Shutemov" , Michael Ellerman , Andrew Morton , Dan Williams , Jan Kara , Thomas Gleixner , Josef Bacik , Ingo Molnar , Tejun Heo , Andrey Ryabinin , Nikolay Aleksandrov , Dmitry Vyukov , linux-kernel@vger.kernel.org, kernel-hardening@lists.openwall.com Subject: Re: [PATCH v3 4/5] bug: Provide toggle for BUG on data corruption Date: Mon, 22 Aug 2016 15:15:35 +0200 Message-ID: <4367840.AWTJIHYqbe@wuerfel> User-Agent: KMail/5.1.3 (Linux/4.4.0-31-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: <1471470132-29499-5-git-send-email-keescook@chromium.org> References: <1471470132-29499-1-git-send-email-keescook@chromium.org> <1471470132-29499-5-git-send-email-keescook@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:/SrxI17PTlhh68ZnLZelYpi1RD0osXU+MKc+Su0PasZj/X3BRbk QjBLFPjqfyurkDXNHDM4895GpLAI85ZRXhpRxbu7UCbxf7kTtIopOc3DM7pjVGp90DmoRJX ZcbS8dAJ3gqrgWWvA17CWJCdFWSXa/ZBJGedW8aEoSZTXDtxVrd1weuTD39hJFIuB/vNk7X sI4QVsla8BaeXJ+39601g== X-UI-Out-Filterresults: notjunk:1;V01:K0:i545FVHUH8Q=:FcUiAFouHXuDUsHY0Zs6ON YtKb1qy7dxx5YTpanMpHUre5egxBrZnMsWZsVo64XotMZCDRlEbdALm8henifwkDbl+qgpnRq QF7BlHSK/cLd35EvYLZ+6EavmFmF2+vy+qoZZPtzsbfU3+XeUfkmeclHCuncd0t5otiW8zfkY 8AgtaiuLUK/xTL6narMANESwKCUnQ5SHEfcL4CTyY2Ay9qhsykZPtDrujBkXye1HcNUjfar3O Ue7cEF/ZDyqhTJjwJdODBLdQUskBnWsBinWI+v4LihRb5wBc2Tcf8ym0N+EJwSYrUdJscQUGy 9VMcT3/ywZdZlJCEj/WGvI4f6O7vIAFw7UETrzT58boDONV9aOjLq9Yp8pcf8ZTi3zH+GZ74A /pWoBQO4dsYLmWuHeTuqNbEFkYOQBKFScY3TTLwaKnMGCINE+413QkZCfeaC1uVTkDd7skehb G1VElyXH73+1y8lzmSo3oYreXMNiG8FQ6UquBhYpGkhOU+QVY0sDWS7RTOEN3t+3N9yKPkFv3 l7ojgSNaxrZlny86zZZRYjZDdQGkCteJjZ7Sw8Mc0npaiTz5Nio12xItgeBN+DM4GHgPatuph +jejkURwwqzNdCCVstfMY5v0faN6iEt3bbk5//3eIOqcznol4xA5Aq81ZelkiVHJiq2RWYFHe ekcQ4WZaPU2goJfyuaka/glcswK1ACjD977qlr4Kqi4fbTS8vcaJNHnu8r0sOnrWn3Ji4tjue 6zktmw3+38k4rw4i Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wednesday, August 17, 2016 2:42:11 PM CEST Kees Cook wrote: > + > +/* > + * Since detected data corruption should stop operation on the affected > + * structures, this returns false if the corruption condition is found. > + */ > +#define CHECK_DATA_CORRUPTION(condition, fmt, ...) \ > + do { \ > + if (unlikely(condition)) { \ > + if (IS_ENABLED(CONFIG_BUG_ON_DATA_CORRUPTION)) { \ > + pr_err(fmt, ##__VA_ARGS__); \ > + BUG(); \ > + } else \ > + WARN(1, fmt, ##__VA_ARGS__); \ > + return false; \ > + } \ > + } while (0) > + I think the "return false" inside of the macro makes it easy to misread what is actually going on. How about making it a macro that returns the condition argument? #define CHECK_DATA_CORRUPTION(condition, fmt, ...) \ ({ \ bool _condition = unlikely(condition); \ if (_condition) { \ ... } \ _condition; \ }) Arnd