From patchwork Thu Nov 1 01:44:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 991787 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="u3AjW5vh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42lp1K2F66z9sDP for ; Thu, 1 Nov 2018 12:45:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726369AbeKAKpz (ORCPT ); Thu, 1 Nov 2018 06:45:55 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:37326 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726070AbeKAKpz (ORCPT ); Thu, 1 Nov 2018 06:45:55 -0400 Received: by mail-pl1-f194.google.com with SMTP id bh10-v6so8144098plb.4; Wed, 31 Oct 2018 18:45:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=BKIjweOIJDYb+D5qqQtBUGBxgB2Oy/lnCEM25usTaeQ=; b=u3AjW5vhfUR0XlnfHXpkXdbPoUYJKd8Q1mPj36RqETFqn975pzB6pKzwZo0RQynbJq cZzNJBFLIZEIJndAcA4Tsn7Qqo/XqVF06K9U4y4m+QWPv9Y5zohgfFOeCrECRjh2rl21 EgE2Gg0gUu6gAJmO7DzQYuoJrZolmhNEjKilepXmmybSatqJ6RvkYJBIU4MthRw5Q0Yd fSk3fqzs4akaL0rN/qlTC3YCUjoSGMeN4CNxmRPc67+vH5GO7RFyD08v2T3kdgVStIOe arUEuChrca64wW7YSRYePxtU5d/iu5NTqQonqSg7eWlR+gL7rmE/LbwkIUKqv15bX075 /pGA== 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=BKIjweOIJDYb+D5qqQtBUGBxgB2Oy/lnCEM25usTaeQ=; b=T0quodyLw5+pGCx8dG1RoeKHnVEYfR2Vo82gSEsEGCZP5bb18duZ07VRztz0Pj8wGl UHNqu7IkdJrnS7d1OfV2dgPOmaO8PMrvtsQSOr0O2B05aAph/Zq9eKEjTE2fmXCnziWX voBc8KcvDQxFn3FO+jL+Wa6iEkfQqirGvo+O0aNDzJQ/PikRo35METoAj468tvYWxgor jTj3BZtffj1GIigWzq1GOzlgsRE4PSANzRGy1s1TCvUE3EKIXnEjKfEyHP6UFaQCpK1x qliFJLhWKXgHE+srRxynCHHZqOEnx9/dne2cI+qWGsLjJo9IpYYkq2wyL1r46xu29xCJ UxwA== X-Gm-Message-State: AGRZ1gLsaEchNtpeZk15ewBO3TmSNYlt0/zQ2UXV4Uj8Dctu7zCYnWGT z5eAWdINTlcTeJyRlMx8VM4= X-Google-Smtp-Source: AJdET5cDSw+3BEy+e0s1QoF/kn73jOkSqSzkREkQC9pYzGUikx8JJJUbDFu2sku3Nw/G4DXnQmmbjw== X-Received: by 2002:a17:902:7045:: with SMTP id h5-v6mr5669796plt.211.1541036706460; Wed, 31 Oct 2018 18:45:06 -0700 (PDT) Received: from Asurada-Nvidia.nvidia.com (thunderhill.nvidia.com. [216.228.112.22]) by smtp.gmail.com with ESMTPSA id f68-v6sm67683524pfe.143.2018.10.31.18.45.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Oct 2018 18:45:05 -0700 (PDT) From: Nicolin Chen To: thierry.reding@gmail.com, airlied@linux.ie, jonathanh@nvidia.com Cc: dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm/tegra: falcon: Validate firmware.vaddr with IS_ERR_OR_NULL Date: Wed, 31 Oct 2018 18:44:20 -0700 Message-Id: <20181101014420.13366-1-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The firmware.vaddr might be assigned with an error code instead of NULL, so this patch uses an IS_ERR_OR_NULL check to fix below bug. Unable to handle kernel paging request at virtual address fffffffffffffff0 [...] pc : falcon_load_firmware+0x80/0x358 [tegra_drm] lr : falcon_load_firmware+0x2b4/0x358 [tegra_drm] sp : ffff000010feb4a0 [...] Call trace: falcon_load_firmware+0x80/0x358 [tegra_drm] vic_init+0x74/0x158 [tegra_drm] host1x_device_init+0x58/0x108 [host1x] tegra_drm_load+0xdc/0x2b8 [tegra_drm] Signed-off-by: Nicolin Chen --- drivers/gpu/drm/tegra/falcon.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/tegra/falcon.c b/drivers/gpu/drm/tegra/falcon.c index f685e72949d1..9126d4fc5933 100644 --- a/drivers/gpu/drm/tegra/falcon.c +++ b/drivers/gpu/drm/tegra/falcon.c @@ -141,9 +141,10 @@ int falcon_load_firmware(struct falcon *falcon) /* allocate iova space for the firmware */ falcon->firmware.vaddr = falcon->ops->alloc(falcon, firmware->size, &falcon->firmware.paddr); - if (!falcon->firmware.vaddr) { + if (IS_ERR_OR_NULL(falcon->firmware.vaddr)) { dev_err(falcon->dev, "dma memory mapping failed\n"); - return -ENOMEM; + err = PTR_ERR(falcon->firmware.vaddr); + return err ? err : -ENOMEM; } /* copy firmware image into local area. this also ensures endianness */