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

Jani Nikula jani.nikula at linux.intel.com
Tue Sep 3 12:51:38 UTC 2019


On Thu, 29 Aug 2019, Jernej Škrabec <jernej.skrabec at gmail.com> wrote:
> 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:

And add more const for good measure:

static const char * const drm_named_modes_whitelist[] = {

BR,
Jani.

>
> 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,
>
>
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the dri-devel mailing list