From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C8DE5C63797 for ; Tue, 17 Jan 2023 10:30:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Subject:Cc:To: From:Date:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=U5+ngobrwRUOWvDqMV5zNStnruEfd5cQTOMQuEv3c0A=; b=udY8PXjcdhSQNk M+LAfT8pRnjUBzrIhslm2WsCIq+3sT5tXH4weiqW/cxTAfGWcTBtK9jmNc1R3fkBzebHpZuyIhaai Y1BPITpLkZkhvLCuworxld5XA2D2GtrOYu5TAWBZL3A5PVX+6QnCjM3+NwATf/bm144t4w4JQh3M/ VdanKF2T/qxh2oxHpbNkmhXS9/fvBuyVJ5VUb8C/d9R/h6am/9f3kunPix97iIdBb9o+j1W9FAxX3 YxfJd5QAszLwPu0nXka9XWnLUou0+FDdMgD2cAQI12y8Fn+yKQcY/rO3WkwVrV72lSTmtquSlxE2I 8ANcAZ43HlB8tv4ZV47g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pHjDa-00DkwB-1j; Tue, 17 Jan 2023 10:29:26 +0000 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pHjDV-00DkuX-Mt for linux-arm-kernel@lists.infradead.org; Tue, 17 Jan 2023 10:29:23 +0000 Received: by mail-wm1-x329.google.com with SMTP id c4-20020a1c3504000000b003d9e2f72093so20616239wma.1 for ; Tue, 17 Jan 2023 02:29:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=Y2TG6x/icjU+tcPvzpizFrnhKowWOBcPwzlRRry60us=; b=g+5JIQvSSqHbS4XroIHOx5ERuMFq/2gSM2/nCd4ZQvwfAr3I/39RYcrW65udRcKg8+ c8UZe6hudjxMy9Sok2z0/WRNSOOFyg84iC6sPufS7vLjgp8v2GNZvqNnLSTW9qkTh4d6 1r7/DrOoA5wVGNHiCvwF37uVOnDe3AZTQYFqTTbKTsBeTCEEXM7ERJxZtG89bUA6f5tC KqI/usVeEj10Gg+tT/CTjp8pTZTC42VGCfMdop6yGiXUIwptjJLnJhtQoSDDtS5/ugCj FSriFVyDZLo6MawH2TY965M6kJWm0WmS1M5Si5fW72uWZPvHn7tw+BUknf5IK5r7hAcn 70/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Y2TG6x/icjU+tcPvzpizFrnhKowWOBcPwzlRRry60us=; b=s5JOD50/CBjgEzkuar3NRSxGG1e2+BdFa5KuK1ykKKqE727uWv6yRtTPcBT6CII5k3 XWK42TJS3OFUABm+gP7AtGmni0CSgGJAVX4upVL/RoZOjRyzgLS4RgONvFxl4IcX1PPN K46zn4JCFc13GfGHLQ+s5DYUSgMOyfpChrq/tz/nLjTLAclJZdaYLmfcbPWGHikaaM/0 SU7YpviWj33L7LUV12w4/etYfHl9e8fbQjNhwz1PRiZVNr1X9jn6sJ5z9FWCMdNPyssR gkeNpMuEft0uVhOJnBJkj0liD2aNs2Ef1dKOfWTgsGD77vnCUkNQ+rzs/eemcQR8VnYv tPpg== X-Gm-Message-State: AFqh2kpj7mqJa9tR8u4ZPcXWZrTBv6PUwIrOsb2BTRXwnHo2Go+8D2RV 2RtgrIPV7fVRq+5autK0J7E= X-Google-Smtp-Source: AMrXdXtwjiRSMtHOdAGykdKbIS1oH2Gl1m6tCI2zDdM7jwBN1qBTJB8NXIRSgx5ClLS7PbXlqq3JMA== X-Received: by 2002:a7b:c5cb:0:b0:3da:fac4:7da3 with SMTP id n11-20020a7bc5cb000000b003dafac47da3mr2423885wmk.36.1673951359200; Tue, 17 Jan 2023 02:29:19 -0800 (PST) Received: from localhost ([102.36.222.112]) by smtp.gmail.com with ESMTPSA id he5-20020a05600c540500b003d9ed40a512sm36123412wmb.45.2023.01.17.02.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:18 -0800 (PST) Date: Tue, 17 Jan 2023 13:29:13 +0300 From: Dan Carpenter To: cristian.marussi@arm.com Cc: linux-arm-kernel@lists.infradead.org Subject: [bug report] firmware: arm_scmi: Call Raw mode hooks from the core stack Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230117_022921_779342_43A3AA6C X-CRM114-Status: GOOD ( 11.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hello Cristian Marussi, The patch ffb07d58dcba: "firmware: arm_scmi: Call Raw mode hooks from the core stack" from Jan 13, 2023, leads to the following Smatch static checker warning: drivers/firmware/arm_scmi/driver.c:2732 scmi_probe() error: 'info->dbg' dereferencing possible ERR_PTR() drivers/firmware/arm_scmi/driver.c 2630 static int scmi_probe(struct platform_device *pdev) 2631 { 2632 int ret; 2633 struct scmi_handle *handle; 2634 const struct scmi_desc *desc; 2635 struct scmi_info *info; 2636 struct device *dev = &pdev->dev; 2637 struct device_node *child, *np = dev->of_node; 2638 2639 desc = of_device_get_match_data(dev); 2640 if (!desc) 2641 return -EINVAL; 2642 2643 info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); 2644 if (!info) 2645 return -ENOMEM; 2646 2647 info->id = ida_alloc_min(&scmi_id, 0, GFP_KERNEL); 2648 if (info->id < 0) 2649 return info->id; 2650 2651 info->dev = dev; 2652 info->desc = desc; 2653 info->bus_nb.notifier_call = scmi_bus_notifier; 2654 info->dev_req_nb.notifier_call = scmi_device_request_notifier; 2655 INIT_LIST_HEAD(&info->node); 2656 idr_init(&info->protocols); 2657 mutex_init(&info->protocols_mtx); 2658 idr_init(&info->active_protocols); 2659 mutex_init(&info->devreq_mtx); 2660 2661 platform_set_drvdata(pdev, info); 2662 idr_init(&info->tx_idr); 2663 idr_init(&info->rx_idr); 2664 2665 handle = &info->handle; 2666 handle->dev = info->dev; 2667 handle->version = &info->version; 2668 handle->devm_protocol_acquire = scmi_devm_protocol_acquire; 2669 handle->devm_protocol_get = scmi_devm_protocol_get; 2670 handle->devm_protocol_put = scmi_devm_protocol_put; 2671 2672 /* System wide atomic threshold for atomic ops .. if any */ 2673 if (!of_property_read_u32(np, "atomic-threshold-us", 2674 &info->atomic_threshold)) 2675 dev_info(dev, 2676 "SCMI System wide atomic threshold set to %d us\n", 2677 info->atomic_threshold); 2678 handle->is_transport_atomic = scmi_is_transport_atomic; 2679 2680 if (desc->ops->link_supplier) { 2681 ret = desc->ops->link_supplier(dev); 2682 if (ret) 2683 goto clear_ida; 2684 } 2685 2686 /* Setup all channels described in the DT at first */ 2687 ret = scmi_channels_setup(info); 2688 if (ret) 2689 goto clear_ida; 2690 2691 ret = bus_register_notifier(&scmi_bus_type, &info->bus_nb); 2692 if (ret) 2693 goto clear_txrx_setup; 2694 2695 ret = blocking_notifier_chain_register(&scmi_requested_devices_nh, 2696 &info->dev_req_nb); 2697 if (ret) 2698 goto clear_bus_notifier; 2699 2700 ret = scmi_xfer_info_init(info); 2701 if (ret) 2702 goto clear_dev_req_notifier; 2703 2704 if (scmi_top_dentry) { 2705 info->dbg = scmi_debugfs_common_setup(info); The scmi_debugfs_common_setup() has messed up returns. It returns both NULL and error pointers for errors. It checks debugfs functions and the returns for those are generally supposed to be ignored. I have written a blog about mixing error pointers and NULL which also explains this historical/psychology based reason why debugfs does not follow the normal pattern: https://staticthinking.wordpress.com/2022/08/01/mixing-error-pointers-and-null/ 2706 2707 if (IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT) && info->dbg) { 2708 int id, num_chans = 0; 2709 struct scmi_chan_info *cinfo; 2710 u8 channels[SCMI_MAX_CHANNELS] = {}; 2711 DECLARE_BITMAP(protos, SCMI_MAX_CHANNELS) = {}; 2712 2713 /* Enumerate all channels to collect their ids */ 2714 idr_for_each_entry(&info->tx_idr, cinfo, id) { 2715 /* 2716 * Cannot happen, but be defensive. 2717 * Zero as num_chans is ok, warn and carry on. 2718 */ 2719 if (num_chans >= SCMI_MAX_CHANNELS || !cinfo) { 2720 dev_warn(dev, 2721 "SCMI RAW - Error enumerating channels\n"); 2722 break; 2723 } 2724 2725 if (!test_bit(cinfo->id, protos)) { 2726 channels[num_chans++] = cinfo->id; 2727 set_bit(cinfo->id, protos); 2728 } 2729 } 2730 2731 info->raw = scmi_raw_mode_init(handle, --> 2732 info->dbg->top_dentry, ^^^^^^^^^^^ Error pointer dereference. 2733 info->id, 2734 channels, num_chans, 2735 info->desc, 2736 info->tx_minfo.max_msg); 2737 if (IS_ERR(info->raw)) { 2738 dev_err(dev, "Failed to initialize SCMI RAW Mode !\n"); 2739 2740 ret = PTR_ERR(info->raw); 2741 } 2742 2743 if (!IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT_COEX)) { 2744 if (!ret) 2745 return ret; 2746 /* 2747 * Bail out if we failed to init raw mode and 2748 * RAW_MODE_SUPPORT_COEX was not configured. 2749 */ 2750 goto clear_dev_req_notifier; 2751 } 2752 regards, dan carpenter _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel