Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp754272imm; Thu, 13 Sep 2018 07:16:23 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdb7Mq9+OjgzvdKUkh8oc81X1ar5fg8dGOotn343bZT6zifs3AGYqbDR3ulHyLIjCjOpPrT6 X-Received: by 2002:a63:1947:: with SMTP id 7-v6mr7492096pgz.192.1536848183061; Thu, 13 Sep 2018 07:16:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536848183; cv=none; d=google.com; s=arc-20160816; b=Rzv+s411Y7LH312SEUtef5FBASDxhVC1lK3GsLLtKwypxbXZHPayPhoO3nClTNjNrx eDOj3wzxhAMV55zHOJEx71SCA/JbVDtxlK1DKjV0rLvlsZOkGwwhVTkjamnB00cTti8u tqh9TZHItRPRxSnCYgdS+iFEzZWUdr6XFwBFZO7+rN6mWwDfcGDSFY9tISHWq61YzHyA jt+M2EhS0TrFp7ZICtybG5Qp9s91TKXhg/EZf6Rvg8WxjYHySJ8rRCkDop5tdXItzLxN l0bXHXAoCn4JN3C0a35COG5a23gw6miRTow1FG1NZo55J/yKUcSmp9bS0cfuZMd19/uc hKnA== 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=EYp0iwzCHVgKjcrh2qP3BUO2Ydt1yGwVgoJoqJHqSBo=; b=zTc4sPs4LC1+1yBSBSqC7vObKJbbCHddRdfa0ooQ3+2Rzqq1wtEwwCp3s1R7VxZuU/ iz478WOpG73Gp8xuKV2jD838rJpu55PqzWt46uRnhee6vRlhuCKvqXmclK/oB6N5Oa18 jNJ8UaQKUvV20uRFTRWlApxl4ZbwlsA7cEkCHPvcWZmBuFaqdIvwtqwDlsycI1yXYg3q RTU7PQYIZ0+Ix2nH96LpFwhcpd22W1M6CbfqeSQOGHNsZ+Wjpfkb6NaRy9r3OKeQFzhJ C9TTwrkC7FNwVZsCjJe6U95txA9g6zlDn44YmJ5ENjPm4/hwiaBYeRmkPQjOfqi2K7c0 jDkA== 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 29-v6si4134272pfn.205.2018.09.13.07.15.55; Thu, 13 Sep 2018 07:16:23 -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 S1729843AbeIMSy3 (ORCPT + 99 others); Thu, 13 Sep 2018 14:54:29 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:60638 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728239AbeIMSy2 (ORCPT ); Thu, 13 Sep 2018 14:54:28 -0400 Received: from localhost (ip-213-127-77-73.ip.prioritytelecom.net [213.127.77.73]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 5D0F3CF3; Thu, 13 Sep 2018 13:44:55 +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.14 024/115] sunrpc: Dont use stack buffer with scatterlist Date: Thu, 13 Sep 2018 15:30:44 +0200 Message-Id: <20180913131825.086389858@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20180913131823.327472833@linuxfoundation.org> References: <20180913131823.327472833@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.14-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; }