Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp728302imm; Thu, 13 Sep 2018 06:55:59 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZktoD0tZfsjdUfT10EtOkGit26gTUmEvdMA/oCJcB+tQeOdfvfZmpnc45moanZXaMBlqWF X-Received: by 2002:a17:902:4081:: with SMTP id c1-v6mr7458153pld.169.1536846958971; Thu, 13 Sep 2018 06:55:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536846958; cv=none; d=google.com; s=arc-20160816; b=gA/W3Xfc/vsi+vXssjqzS/Qi/fHRQTk1J7G69RGhrGXfrlCp+paf4QTOe8cGkVP05U rtnQ4y0MgyFVVa6UxSvfpilbS0oUVZbSSDT9Ssb/Aud2UceJfvwzLDqACFr1f7byzgVx uGg/vTPUa5fWav/XtAQYUFhUE+z+XTWS4grkAzEV601gEWafj7XuR7ElxOxyt+W7WtDe 1gUGXEdq0zf67+tx7y5DKD+RjlMWW2sgygzyRjclTtP6Nrhfup5nLqPfvlPrH0exXm5O L07qzaFae8rf06yvJy3r8CG59k+GBQrRK51s6YIGo5NgQLUiYlhUCACv0Jb6QuKJZH60 c5Lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from; bh=6KLcK/s4gRU1pAr15KCVY/dpX5mK2nalWZ0xai+dszs=; b=B4tuT9AzoZj++IntqNQNmBYTPYPBswlNiLrOMfJC+CCU4WbhLOEpn8ahK0R8p1oRy1 u17Jf9PNHTvRBrXiHmBCspQiyW6EDDHJTjYvkIi7NZR6ggUzu5S6TSH8aVVAzOy2FSnE tY53F5rcaxhcQ+sKBZnmKsijiPNTOoInqvrA3kC6dj35EVewhQagIG6dn0rRKxnzeWyu 845+jN7jho+2SUyWj88ffc7i14k2LFrg6s+xemH8MVIQ9Nw3F6ByA4a3DBPsEVDYCbXq vwm0F4WB9U/52yF24KNZKYHs8jRTSmMO5EoMrLbraofI5h7CegMX/esh2u7kQwVo1ydM V76Q== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e20-v6si4254801pgm.172.2018.09.13.06.55.40; Thu, 13 Sep 2018 06:55:58 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731256AbeIMTFL (ORCPT + 99 others); Thu, 13 Sep 2018 15:05:11 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:34004 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727783AbeIMTFK (ORCPT ); Thu, 13 Sep 2018 15:05:10 -0400 Received: from localhost (ip-213-127-77-73.ip.prioritytelecom.net [213.127.77.73]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 07EE2D19; Thu, 13 Sep 2018 13:55:33 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Laura Abbott , "J. Bruce Fields" , Sasha Levin Subject: [PATCH 4.18 040/197] sunrpc: Dont use stack buffer with scatterlist Date: Thu, 13 Sep 2018 15:29:49 +0200 Message-Id: <20180913131843.153366187@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20180913131841.568116777@linuxfoundation.org> References: <20180913131841.568116777@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Laura Abbott [ Upstream commit 44090cc876926277329e1608bafc01b9f6da627f ] Fedora got a bug report from NFS: kernel BUG at include/linux/scatterlist.h:143! ... RIP: 0010:sg_init_one+0x7d/0x90 .. make_checksum+0x4e7/0x760 [rpcsec_gss_krb5] gss_get_mic_kerberos+0x26e/0x310 [rpcsec_gss_krb5] gss_marshal+0x126/0x1a0 [auth_rpcgss] ? __local_bh_enable_ip+0x80/0xe0 ? call_transmit_status+0x1d0/0x1d0 [sunrpc] call_transmit+0x137/0x230 [sunrpc] __rpc_execute+0x9b/0x490 [sunrpc] rpc_run_task+0x119/0x150 [sunrpc] nfs4_run_exchange_id+0x1bd/0x250 [nfsv4] _nfs4_proc_exchange_id+0x2d/0x490 [nfsv4] nfs41_discover_server_trunking+0x1c/0xa0 [nfsv4] nfs4_discover_server_trunking+0x80/0x270 [nfsv4] nfs4_init_client+0x16e/0x240 [nfsv4] ? nfs_get_client+0x4c9/0x5d0 [nfs] ? _raw_spin_unlock+0x24/0x30 ? nfs_get_client+0x4c9/0x5d0 [nfs] nfs4_set_client+0xb2/0x100 [nfsv4] nfs4_create_server+0xff/0x290 [nfsv4] nfs4_remote_mount+0x28/0x50 [nfsv4] mount_fs+0x3b/0x16a vfs_kern_mount.part.35+0x54/0x160 nfs_do_root_mount+0x7f/0xc0 [nfsv4] nfs4_try_mount+0x43/0x70 [nfsv4] ? get_nfs_version+0x21/0x80 [nfs] nfs_fs_mount+0x789/0xbf0 [nfs] ? pcpu_alloc+0x6ca/0x7e0 ? nfs_clone_super+0x70/0x70 [nfs] ? nfs_parse_mount_options+0xb40/0xb40 [nfs] mount_fs+0x3b/0x16a vfs_kern_mount.part.35+0x54/0x160 do_mount+0x1fd/0xd50 ksys_mount+0xba/0xd0 __x64_sys_mount+0x21/0x30 do_syscall_64+0x60/0x1f0 entry_SYSCALL_64_after_hwframe+0x49/0xbe This is BUG_ON(!virt_addr_valid(buf)) triggered by using a stack allocated buffer with a scatterlist. Convert the buffer for rc4salt to be dynamically allocated instead. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1615258 Signed-off-by: Laura Abbott Signed-off-by: J. Bruce Fields Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- net/sunrpc/auth_gss/gss_krb5_crypto.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) --- a/net/sunrpc/auth_gss/gss_krb5_crypto.c +++ b/net/sunrpc/auth_gss/gss_krb5_crypto.c @@ -169,7 +169,7 @@ make_checksum_hmac_md5(struct krb5_ctx * struct scatterlist sg[1]; int err = -1; u8 *checksumdata; - u8 rc4salt[4]; + u8 *rc4salt; struct crypto_ahash *md5; struct crypto_ahash *hmac_md5; struct ahash_request *req; @@ -183,14 +183,18 @@ make_checksum_hmac_md5(struct krb5_ctx * return GSS_S_FAILURE; } + rc4salt = kmalloc_array(4, sizeof(*rc4salt), GFP_NOFS); + if (!rc4salt) + return GSS_S_FAILURE; + if (arcfour_hmac_md5_usage_to_salt(usage, rc4salt)) { dprintk("%s: invalid usage value %u\n", __func__, usage); - return GSS_S_FAILURE; + goto out_free_rc4salt; } checksumdata = kmalloc(GSS_KRB5_MAX_CKSUM_LEN, GFP_NOFS); if (!checksumdata) - return GSS_S_FAILURE; + goto out_free_rc4salt; md5 = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC); if (IS_ERR(md5)) @@ -258,6 +262,8 @@ out_free_md5: crypto_free_ahash(md5); out_free_cksum: kfree(checksumdata); +out_free_rc4salt: + kfree(rc4salt); return err ? GSS_S_FAILURE : 0; }