FAILED: patch "[PATCH] drm/i915/bios: range check LFP Data Block panel_type2" failed to apply to 6.1-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 2084503f2d087bf956198e7f6eb25b03a7049cb2
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072911-stoneware-animosity-c41f@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2084503f2d087bf956198e7f6eb25b03a7049cb2 Mon Sep 17 00:00:00 2001
From: Jani Nikula <[email protected]>
Date: Fri, 26 Jun 2026 17:01:55 +0300
Subject: [PATCH] drm/i915/bios: range check LFP Data Block panel_type2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
While the panel_type from LFP Data Block is range checked, panel_type2 is not. Add a few helpers for range checking, and use them to not only check panel_type2, but also improve clarity and correctness in the panel type selection.
Discovered using AI-assisted static analysis confirmed by Intel Product Security.
v2:
- Fix commit message typo (Michał)
- Add is_panel_type_pnp() (Ville)
drivers/gpu/drm/i915/display/intel_bios.c +28 -8
@@ -623,6 +623,21 @@ get_lfp_data_tail(const struct bdb_lfp_data *data,return NULL ; } +static bool is_panel_type_valid (int panel_type) +{ +return panel_type >=0 && panel_type <16 ; +} + +static bool is_panel_type_pnp (int panel_type) +{ +return panel_type ==0xff ; +} + +static bool is_panel_type_valid_or_pnp (int panel_type) +{ +return is_panel_type_valid (panel_type) ||is_panel_type_pnp (panel_type); +} +static int opregion_get_panel_type (struct intel_display *display,const struct intel_bios_encoder_data *devdata,const struct drm_edid *drm_edid,bool use_fallback)
@@ -640,15 +655,21 @@ static int vbt_get_panel_type(struct intel_display *display,if (!lfp_options)return -1 ; -if (lfp_options->panel_type >0xf && - lfp_options->panel_type !=0xff ) { +if (!is_panel_type_valid_or_pnp (lfp_options->panel_type)) {drm_dbg_kms (display->drm,"Invalid VBT panel type 0x%x\n" , lfp_options->panel_type);return -1 ; } -if (devdata && devdata->child.handle ==DEVICE_HANDLE_LFP2 ) +if (devdata && devdata->child.handle ==DEVICE_HANDLE_LFP2 ) { +if (!is_panel_type_valid_or_pnp (lfp_options->panel_type2)) { +drm_dbg_kms (display->drm,"Invalid VBT panel type 2 0x%x\n" , + lfp_options->panel_type2); +return -1 ; + } +return lfp_options->panel_type2; + }drm_WARN_ON (display->drm, devdata && devdata->child.handle !=DEVICE_HANDLE_LFP1 );
@@ -762,13 +783,12 @@ static int get_panel_type(struct intel_display *display, panel_types[i].name, panel_types[i].panel_type); } -if (panel_types[PANEL_TYPE_OPREGION ].panel_type >=0 ) +if (is_panel_type_valid (panel_types[PANEL_TYPE_OPREGION ].panel_type)) i =PANEL_TYPE_OPREGION ; -else if (panel_types[PANEL_TYPE_VBT ].panel_type ==0xff && - panel_types[PANEL_TYPE_PNPID ].panel_type >=0 ) +else if (is_panel_type_pnp (panel_types[PANEL_TYPE_VBT ].panel_type) && +is_panel_type_valid (panel_types[PANEL_TYPE_PNPID ].panel_type)) i =PANEL_TYPE_PNPID ; -else if (panel_types[PANEL_TYPE_VBT ].panel_type !=0xff && - panel_types[PANEL_TYPE_VBT ].panel_type >=0 ) +else if (is_panel_type_valid (panel_types[PANEL_TYPE_VBT ].panel_type)) i =PANEL_TYPE_VBT ;else i =PANEL_TYPE_FALLBACK ;