Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1250176imm; Fri, 17 Aug 2018 14:45:33 -0700 (PDT) X-Google-Smtp-Source: AA+uWPw8KDwY7jpvyviiITqnc+pbqBGJ4+oD3lOPJTnqf5u/P+p75GlGkpaYlwarnHv4/eF4uwNl X-Received: by 2002:a17:902:b595:: with SMTP id a21-v6mr35302039pls.23.1534542333063; Fri, 17 Aug 2018 14:45:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534542333; cv=none; d=google.com; s=arc-20160816; b=Hk1E9DS7hq+PJSEO4wK8dSEl5lC7bbhpgQQKvSxAobAA6f47+gsQZ63hsAhTL0Fdf7 l9RepugBT0vCkok1XwLAsvGe28sx3BMJWNDUTEaXaDDePDF+lWzENa2+D26d6bJC7Xpz Gq3un+P2MYWpnWjqCob/oCpjqKimUyUYFGeLMfR4rC8lunsiMdQuzizeihdbSoCwuMnx Uik4Y484ATzxO7Bk59pjrui0hpiQID+Wr/xot7wFb5RnfOQ2pjuY9+hdZuTIeoEMe4od Y57C2h/2VOWfoOem4o73Qfz6swGFVn0B5RwdmDBUuphMRUxevtYEVZMpSNBI+VbuyWTe Lw7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=icxKC39UwnJFYBMg01D4HTbzXjnNb5ieCLVQ2omY9vg=; b=zVEdqqn1JS2lBqY9PkKWoeTN80peaoXZEMe8qtQfQBhuw7wDTkMO1+5Ke9izQ+8GLb 3XR0lBCyPKTuXQ7liMM6qtAFbsTxjXYDX3hHgGVH8eRW8FcCcvm0E4LmZvslLildyTs4 fW5sLujnj9ZUm0KTbt52G2QNfwsnaQCozqfZlkbqmGBBaN3d8v4taiA1X667itG4Kj+j d/s+UK0CiDFLwB33EdGymVWgjWn15+3uhX0fuHMFq2a3DXdYGulUgpIJMrkjg5BWCSFS leROrF3GBZ8SPOWm0lafPq8e0q21YbZi/ZEg9LP9pEONo3skUL0MD/YpntMZmdHhuUAh 7HbQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t1-v6si3330408plr.102.2018.08.17.14.45.18; Fri, 17 Aug 2018 14:45:33 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728424AbeHRAtM (ORCPT + 99 others); Fri, 17 Aug 2018 20:49:12 -0400 Received: from mail-qk0-f196.google.com ([209.85.220.196]:39158 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726292AbeHRAtM (ORCPT ); Fri, 17 Aug 2018 20:49:12 -0400 Received: by mail-qk0-f196.google.com with SMTP id b5-v6so7241340qkg.6 for ; Fri, 17 Aug 2018 14:44:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=icxKC39UwnJFYBMg01D4HTbzXjnNb5ieCLVQ2omY9vg=; b=LUXpWkXIDmSNLEeLFGOUnXT3ymTWPSHahK3/nBUJiZgAr9iknGEGsf+giN92YTcY9x k1NUXx6BNlxVFVSGRf1tuUTg4xMXn+Y8Opl08XkISUawVGDRNTPb9f3sgpguBzhAe5qr INz49nXr1veH0ClwRObheKms/t0uwPy8im5qZ8TI9PvQ1BYtv4p4A4BAHXYxBuA+3pvz mOC/+ia0ZiqLPUV+OW47FQxuGejs7CUTRtcaZHpvJqr+aW7Tp+ulHgSrgNDISdNXwVTL TWFTS75nu+qX/eKd/jWiPNxoOfuho+lphgFeZqtsYbCU2lDIIsYp9/Ndz68jp037Tz6g NzSQ== X-Gm-Message-State: AOUpUlFpGrXPDhNk1pwkmQwx8qRO/F4cdln/K6DtrHgTy6enfoHGvu1h WttpCZABhOnffJDl7AdfG0tMwA== X-Received: by 2002:a37:7ec3:: with SMTP id z186-v6mr33328501qkc.15.1534542248399; Fri, 17 Aug 2018 14:44:08 -0700 (PDT) Received: from labbott-redhat.redhat.com ([2601:602:9802:a8dc::7272]) by smtp.gmail.com with ESMTPSA id v187-v6sm1812166qka.73.2018.08.17.14.44.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 17 Aug 2018 14:44:07 -0700 (PDT) From: Laura Abbott To: "J. Bruce Fields" , Jeff Layton , Trond Myklebust , Anna Schumaker Cc: Laura Abbott , "David S. Miller" , linux-nfs@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] sunrpc: Don't use stack buffer with scatterlist Date: Fri, 17 Aug 2018 14:43:54 -0700 Message-Id: <20180817214354.5780-1-labbott@redhat.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- Compile tested only. --- net/sunrpc/auth_gss/gss_krb5_crypto.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/net/sunrpc/auth_gss/gss_krb5_crypto.c b/net/sunrpc/auth_gss/gss_krb5_crypto.c index 8654494b4d0a..834eb2b9e41b 100644 --- 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 *kctx, char *header, int hdrlen, 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 *kctx, char *header, int hdrlen, 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 @@ make_checksum_hmac_md5(struct krb5_ctx *kctx, char *header, int hdrlen, crypto_free_ahash(md5); out_free_cksum: kfree(checksumdata); +out_free_rc4salt: + kfree(rc4salt); return err ? GSS_S_FAILURE : 0; } -- 2.17.1