Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp457879imm; Fri, 5 Oct 2018 06:38:01 -0700 (PDT) X-Google-Smtp-Source: ACcGV62ueAkRlx4Tt8w9kJ6kVvM8LRijWsUkykvHasGX3XWkcfWwjRfXsGTtyroDSMfGoBwuREet X-Received: by 2002:a63:f409:: with SMTP id g9-v6mr9674638pgi.369.1538746681210; Fri, 05 Oct 2018 06:38:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538746681; cv=none; d=google.com; s=arc-20160816; b=eprpuYBY1L5/HOqH8dFztpoc+EY2Ns9/LRe9iNXEO+n0LESPPryjcc0xoXv/4tUUwA 5KWidO555mNb9jZeggie2pIj/w8kdZbsjQ5Do0aKqbL87PFhmCIn8v/19FYPIMhb93jG Z1ygA0rtnQJTBVXggtxZ4GFU0bvxrteEpIgP9bTTlfO8L5Zfde7wrlIVurpiseya4VT/ BiQE10BzQMUwu7dFnk0Y3nK+j8j2S7+lT+CZnOCB6/XvabJax0ig7vMmIe5BaHMmKoH5 37nkuFup09oRv9kCPB9BtcadHjwYgIAqYbf0Ztn8LjJdwfpNFYdfpniYYmSSxlAuPcSm 1PYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=tEkgZ5jtpdYHfJqF6nbLG/6JabDgzgA+YvlnIB/4gBU=; b=PpKigPnT+5nO2zc5h2J6wgHOwU/bFXY5iku4Qnnpbu0yZvNA3AIy9BP3do0qFe7L38 sxkf3iH1FZTF+pFbPqD38CIYcoMXmHwGINlm1JVey+XekU7pWgeocij8/F+dCmo2D37Z qYH3xzp4wHSIYAwpwznvc35tlo22U2m3nxDmJOta3k5Jl/Eg5DxAysmhY0sE18ncao88 +Z/S0/faGy3G9U4BSqHGr8YKVKPp5EJ67u7OuHCGFxCS08MSAsBkQ0Bt7pzA7dsmoSqz aEmKmONWa0i1R1P2RTENgzja4fzfTAtn7RqX8OTI+DwP+8/1JdjP1986VE24WY5blF2z ZxlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@zx2c4.com header.s=mail header.b=BYXn4QrA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zx2c4.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z9-v6si8252219pgh.213.2018.10.05.06.37.45; Fri, 05 Oct 2018 06:38:01 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@zx2c4.com header.s=mail header.b=BYXn4QrA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zx2c4.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728539AbeJEUf6 (ORCPT + 99 others); Fri, 5 Oct 2018 16:35:58 -0400 Received: from frisell.zx2c4.com ([192.95.5.64]:39485 "EHLO frisell.zx2c4.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727701AbeJEUf6 (ORCPT ); Fri, 5 Oct 2018 16:35:58 -0400 Received: by frisell.zx2c4.com (ZX2C4 Mail Server) with ESMTP id d2f8a01b; Fri, 5 Oct 2018 13:36:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=zx2c4.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=mail; bh=0Kq5AE3q2nUGsIwGUcZBMZ664cM=; b=BYXn4Qr Ab754itrzm2wYeUg9qCn9cZjunZdHOgUUZnT0iGSYsB2aWqJ+hc1Arr/CMcKUxpw Qn11N/vGsJyZAAa7d952BE5JztA4SFpZdUNGD5X1/4vs30IP9/upKJpgQ41htlkC 4qUQKXDtNxH8QvSLldw3k0gMuXhuCKmH1QkKJNoUuu8DZivWlB98R4AyTniwnRB2 SOLJ/9WeMO+q0BMFLz96zfwEhM9Ff3ZwEGFhQkuMz352he7J588yuBUgJ/U29iU5 RRWdnpcL829/SPjhN5kOvoVHpZ57BLtALwUWolNRrQ3r6ijiifQya5NDIaycu1BZ QXVSpsZ9Fahjncg== Received: by frisell.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 25245c3f (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO); Fri, 5 Oct 2018 13:36:46 +0000 (UTC) Date: Fri, 5 Oct 2018 15:37:06 +0200 From: "Jason A. Donenfeld" To: Ard Biesheuvel Cc: linux-kernel@vger.kernel.org, Eric Biggers , Samuel Neves , Andy Lutomirski , Arnd Bergmann , Herbert Xu , "David S. Miller" , Catalin Marinas , Will Deacon , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Thomas Gleixner , Ingo Molnar , Kees Cook , "Martin K. Petersen" , Greg Kroah-Hartman , Andrew Morton , Richard Weinberger , Peter Zijlstra , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [RFC PATCH 0/9] patchable function pointers for pluggable crypto routines Message-ID: <20181005133705.GA4588@zx2c4.com> References: <20181005081333.15018-1-ard.biesheuvel@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20181005081333.15018-1-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ard, On Fri, Oct 5, 2018 at 10:13 AM Ard Biesheuvel wrote: > At the moment, the Zinc library [1] is being proposed as a solution for that, > and while it does address the usability problems, it does a lot more than > that, and what we end up with is a lot less flexible than what we have now. > > Currently, arch specific implementations (based on SIMD or optimized > assembler) live in arch/*/crypto, where each sub-community is in charge > of its own specialized versions of the various primitives (although still > under the purview of the crypto maintainer). Any proposal to change this > model should be judged on its own merit, and not blindly accepted as the > fallout of cleaning up some library code. > > Also, Zinc removes the possibility to plug different versions of a routine, > and instead, keeps all versions in the same module. Currently, the kernel's > module support permits user land to take charge of the policies that decide > which version to use in which context (by loading or blacklisting modules). I think this explanation misunderstands many of the design goals of Zinc and also points to why going your direction instead is a bad idea that will cause even more problems down the road. Zinc does several important things: - Introduces direct C function calls throughout, as a central way of being implemented and as a central way of being used by consumers of the API. This has various obvious benefits for the consumers of the API, but it also has big benefits for the developers of the library as well. Namely, it keeps the relationship between different parts extremely clear and direct. It's an explicit choice for simplicity. And by being the simpler and more direct solution, it also gives gcc an important opportunity to optimize and inline. - Reorganizes crypto routines so that they're grouped together by primitive. This again leads to a much simpler design and layout, making it more obvious what's happening, and making things generally cleaner. It is not only useful and clearer for developers, but it also makes contributors and auditors more easily aware of what implementations are available. - Has higher standards for code and implementations that are introduced. Zinc prefers code that has been formally verified, that has been in widespread usage and has received many eyeballs and fuzzing hours, that has been fuzzed extensively, that is simple in design, that comes from well-known high-quality authors -- in roughly but not precisely that order of preference. That's a bit different from the current practices of the existing crypto API. - Has a simpler mechanism that is just as effective for choosing available implementations. This is, again, more obvious and direct than the present crypto API's module approach, leads to smaller code size, and has the potential of being just as flexible with the inevitable desire for nobs, adjustable from userspace, from kernelspace, or from elsewhere. - Is designed to promote collaboration with the larger cryptography community and with academia, which will yield better implementations and for assurance. - Can easily be extracted to userspace libraries (perhaps a future libzinc could be easily based on it), which makes testing and fuzzing using tools like libfuzzer and afl more accessible. - Has faster implementations than the current crypto API. - Has, again, a very strong focus on being simple and minimal, as opposed to bloated and complicated, so that it's actually possible to understand and audit the library. Therefore, I think this patch goes in exactly the wrong direction. I mean, if you want to introduce dynamic patching as a means for making the crypto API's dynamic dispatch stuff not as slow in a post-spectre world, sure, go for it; that may very well be a good idea. But presenting it as an alternative to Zinc very widely misses the point and serves to prolong a series of bad design choices, which are now able to be rectified by putting energy into Zinc instead. Jason