[PATCH 3/4] drm/modes: Introduce a whitelist for the named modes

Jernej Škrabec jernej.skrabec at gmail.com
Thu Aug 29 18:15:47 UTC 2019


Hi!

Dne torek, 27. avgust 2019 ob 13:58:49 CEST je Maxime Ripard napisal(a):
> From: Maxime Ripard <maxime.ripard at bootlin.com>
> 
> The named modes support has introduced a number of glitches that were in
> part due to the fact that the parser will take any string as a named mode.
> 
> Since we shouldn't have a lot of options there (and they should be pretty
> standard), let's introduce a whitelist of the available named modes so that
> the kernel can differentiate between a poorly formed command line and a
> named mode.
> 
> Signed-off-by: Maxime Ripard <maxime.ripard at bootlin.com>
> ---
>  drivers/gpu/drm/drm_modes.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index ea7e6c8c8318..988797d8080a 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -1677,6 +1677,22 @@ static int drm_mode_parse_cmdline_options(char *str,
> size_t len, return 0;
>  }
> 
> +const char *drm_named_modes_whitelist[] = {
> +	"NTSC",
> +	"PAL",
> +};

That array should be static. With that fixed:

Reviewed-by: Jernej Skrabec <jernej.skrabec at siol.net>

Best regards,
Jernej

> +
> +static bool drm_named_mode_is_in_whitelist(const char *mode, unsigned int
> size) +{
> +	int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(drm_named_modes_whitelist); i++)
> +		if (!strncmp(mode, drm_named_modes_whitelist[i], size))
> +			return true;
> +
> +	return false;
> +}
> +
>  /**
>   * drm_mode_parse_command_line_for_connector - parse command line modeline
> for connector * @mode_option: optional per connector mode option
> @@ -1794,6 +1810,10 @@ bool drm_mode_parse_command_line_for_connector(const
> char *mode_option, if (named_mode) {
>  		if (mode_end + 1 > DRM_DISPLAY_MODE_LEN)
>  			return false;
> +
> +		if (!drm_named_mode_is_in_whitelist(name, mode_end))
> +			return false;
> +
>  		strscpy(mode->name, name, mode_end + 1);
>  	} else {
>  		ret = drm_mode_parse_cmdline_res_mode(name, mode_end,






More information about the dri-devel mailing list