From patchwork Fri Jun 26 03:29:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Morton X-Patchwork-Id: 223002 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B0A66C433E0 for ; Fri, 26 Jun 2020 03:29:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 86E692088E for ; Fri, 26 Jun 2020 03:29:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593142194; bh=0gKfvJL/ltoFdRty5G+wwUVc8XVDPFe5FXXxW25f8X4=; h=Date:From:To:Subject:In-Reply-To:List-ID:From; b=Vy0gRVQwf3xI8tAFeClM9IkwoRsDGKruXprRl7uDNp1l7DuDA3aKgo6NgUR9lKY84 5tl9Fsr5sxb4/sKmguhMdyGjDkIz/5EANN3Jejc5yukRUxMfHXQeSJXt+1LR0Km6UN AMAdgwYxW2FqWd4I2m8moo3NQQt78tJbE5ECsiwE= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728353AbgFZD3y (ORCPT ); Thu, 25 Jun 2020 23:29:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:48224 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728333AbgFZD3x (ORCPT ); Thu, 25 Jun 2020 23:29:53 -0400 Received: from localhost.localdomain (c-71-198-47-131.hsd1.ca.comcast.net [71.198.47.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EE32D20885; Fri, 26 Jun 2020 03:29:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593142193; bh=0gKfvJL/ltoFdRty5G+wwUVc8XVDPFe5FXXxW25f8X4=; h=Date:From:To:Subject:In-Reply-To:From; b=TS5e91FM3EaM3K6FBnxqeE+lbn43ypDZ9Ft384qy4WMcC4do2gxBTrxBGgyqWFUNo 76u+XiJnq2Fzii2WFEqfDoeiH5wHvhtH94IJgRokw7x8YIs1YzKbcxuo5ZaA7clBzQ VUXB3MiQUgTw1mhx627zkZKZT3ipdFrTIrbEG+tQ= Date: Thu, 25 Jun 2020 20:29:52 -0700 From: Andrew Morton To: akpm@linux-foundation.org, dan.carpenter@oracle.com, dhowells@redhat.com, hannes@cmpxchg.org, jarkko.sakkinen@linux.intel.com, Jason@zx2c4.com, jmorris@namei.org, joe@perches.com, longman@redhat.com, mhocko@suse.com, mm-commits@vger.kernel.org, rientjes@google.com, serge@hallyn.com, stable@vger.kernel.org, torvalds@linux-foundation.org, willy@infradead.org Subject: [patch 12/32] mm/slab: use memzero_explicit() in kzfree() Message-ID: <20200626032952._ed4K7Snx%akpm@linux-foundation.org> In-Reply-To: <20200625202807.b630829d6fa55388148bee7d@linux-foundation.org> User-Agent: s-nail v14.8.16 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Waiman Long Subject: mm/slab: use memzero_explicit() in kzfree() The kzfree() function is normally used to clear some sensitive information, like encryption keys, in the buffer before freeing it back to the pool. Memset() is currently used for buffer clearing. However unlikely, there is still a non-zero probability that the compiler may choose to optimize away the memory clearing especially if LTO is being used in the future. To make sure that this optimization will never happen, memzero_explicit(), which is introduced in v3.18, is now used in kzfree() to future-proof it. Link: http://lkml.kernel.org/r/20200616154311.12314-2-longman@redhat.com Fixes: 3ef0e5ba4673 ("slab: introduce kzfree()") Signed-off-by: Waiman Long Acked-by: Michal Hocko Cc: David Howells Cc: Jarkko Sakkinen Cc: James Morris Cc: "Serge E. Hallyn" Cc: Joe Perches Cc: Matthew Wilcox Cc: David Rientjes Cc: Johannes Weiner Cc: Dan Carpenter Cc: "Jason A . Donenfeld" Cc: Signed-off-by: Andrew Morton --- mm/slab_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/slab_common.c~mm-slab-use-memzero_explicit-in-kzfree +++ a/mm/slab_common.c @@ -1726,7 +1726,7 @@ void kzfree(const void *p) if (unlikely(ZERO_OR_NULL_PTR(mem))) return; ks = ksize(mem); - memset(mem, 0, ks); + memzero_explicit(mem, ks); kfree(mem); } EXPORT_SYMBOL(kzfree);