Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp651579pxb; Tue, 5 Apr 2022 17:21:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw7f4nsEkgmgfCLdrSU/AkrZ50G8gM10uAK+1hb4GR7Tfam8arhDwQ8uLWAWGn3+6lJRkGX X-Received: by 2002:a17:906:c145:b0:6da:f8c8:34f1 with SMTP id dp5-20020a170906c14500b006daf8c834f1mr5631998ejc.310.1649204503180; Tue, 05 Apr 2022 17:21:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649204503; cv=none; d=google.com; s=arc-20160816; b=uaVOlMBBY0BKcnDX8uCTSPnU3UUqD/FgVspZhALdyVDXhcfUKMuLQbL96JYhw6tVIJ 7zDMSXxnoxHz4t1F/xkS+V9B04ozX5LPCDdDeYPlckUyMv26+NE9nulka6Oi+7EXZhkF nKbVhYKBsdDj6PVDFqOpwddmvV2gLyfy0Thw2QtT+BEcBARaey17ay7NU+Y5psrIJRa5 8f0wRaBUqsyiYYYzIshbsrv785ofacKVk1i0k5vR8hdqhAsuju8V3cCaDi7fCmzO4GrG om60goVGg2lDKPR3X/kJi8jkwl9St34eOd2WHK2TkmMRyJO4nlO3LAdEdFc2trV3m6af rgWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=n4c/YaZrYP6zV/qA9dNQKxVz9radyVP2mRgAeJ+LcfM=; b=GfskRx2TfdmqP//bTTr0Dqg66V5TwQjuw3n7/CyT+o/DEIm/m6JQOjWQABx3JeRNta coSS+psvNh6Q7pJSS/R8qNQFF63WXGnq85B5r9WQoCebgKGVR21nKRigFp3v76XPNVIP cAh7vp9bcsdkHEsLKCz254lq1WnOMiOOqz+1o+0yFheq+wpn4NsGkJSiPWZ30i/fUZRV mzeLC4xDCqwu5oFE5g50mKmCR2VXfGy6ooC5sGzyJL0mv1v2VHAAkxujdshWDn7+wLFM FCkIBcCsmG92+Eovj9GS6NK1wP9Hw4ofm2tcAibmveabhTXE0cr7x3vL+bMnqMlDYdv8 dJHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=gXRpsE1v; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w14-20020a17090633ce00b006e820adb218si155566eja.673.2022.04.05.17.21.11; Tue, 05 Apr 2022 17:21:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=gXRpsE1v; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243751AbiDEOxN (ORCPT + 99 others); Tue, 5 Apr 2022 10:53:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36680 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244532AbiDEJl1 (ORCPT ); Tue, 5 Apr 2022 05:41:27 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF1CDBB932; Tue, 5 Apr 2022 02:26:36 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 8E947B81C9D; Tue, 5 Apr 2022 09:26:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F2008C385A3; Tue, 5 Apr 2022 09:26:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649150794; bh=5SKEbDrLT6+O1PlKgj+zrudt8PadU0+bYVvcmroswKE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gXRpsE1vZXnNj0WtHqoa9rXQxFEQHJHZ1I7RuPoChXoyH56tNKQx6HrRGl7EqBREx a4FeOtS3j3hzEMomPAj1a4XBaxbEaRInPJBjwXcf3HydRInrcnuNklSZ9W7DJpIR/a cYNRb5HsIZKeiNXhxB4HFLwbnIyXv4vrC/h3Gah0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Lucas De Marchi , Jani Nikula Subject: [PATCH 5.15 184/913] drm/i915/opregion: check port number bounds for SWSCI display power state Date: Tue, 5 Apr 2022 09:20:46 +0200 Message-Id: <20220405070345.370483428@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070339.801210740@linuxfoundation.org> References: <20220405070339.801210740@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jani Nikula commit 24a644ebbfd3b13cda702f98907f9dd123e34bf9 upstream. The mapping from enum port to whatever port numbering scheme is used by the SWSCI Display Power State Notification is odd, and the memory of it has faded. In any case, the parameter only has space for ports numbered [0..4], and UBSAN reports bit shift beyond it when the platform has port F or more. Since the SWSCI functionality is supposed to be obsolete for new platforms (i.e. ones that might have port F or more), just bail out early if the mapped and mangled port number is beyond what the Display Power State Notification can support. Fixes: 9c4b0a683193 ("drm/i915: add opregion function to notify bios of encoder enable/disable") Cc: # v3.13+ Cc: Ville Syrjälä Cc: Lucas De Marchi Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4800 Signed-off-by: Jani Nikula Reviewed-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/cc363f42d6b5a5932b6d218fefcc8bdfb15dbbe5.1644489329.git.jani.nikula@intel.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/i915/display/intel_opregion.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) --- a/drivers/gpu/drm/i915/display/intel_opregion.c +++ b/drivers/gpu/drm/i915/display/intel_opregion.c @@ -376,6 +376,21 @@ int intel_opregion_notify_encoder(struct return -EINVAL; } + /* + * The port numbering and mapping here is bizarre. The now-obsolete + * swsci spec supports ports numbered [0..4]. Port E is handled as a + * special case, but port F and beyond are not. The functionality is + * supposed to be obsolete for new platforms. Just bail out if the port + * number is out of bounds after mapping. + */ + if (port > 4) { + drm_dbg_kms(&dev_priv->drm, + "[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n", + intel_encoder->base.base.id, intel_encoder->base.name, + port_name(intel_encoder->port), port); + return -EINVAL; + } + if (!enable) parm |= 4 << 8;