Device Version Blocklist

Introduction

There may be circumstances where the end user or enterprise wants to artificially restrict the minimum or maximum version of firmware that can be deployed to the device. This could be where a new version of firmware drops a needed feature, fixes a security issue that is actually a required feature in production or to prevent a known-broken firmware being deployed.

Implementation

To prevent downgrade the VersionLowest key can be used in a quirk file, and to prevent upgrade the VersionHighest key can be used instead. They can also be used together if needed.

We can write a new quirk file either into /usr/share/fwupd/quirks.d or /var/lib/fwupd/quirks.d for immutable systems. e.g. create a file limit.quirk in either location matching the chosen instance ID (USB\VID_273F&PID_1004) or GUID (2fa8891f-3ece-53a4-adc4-0dd875685f30).

This file can then be deployed using Ansible to all machines as required.

Prevent Version Downgrade

To prevent installing any lower version than 2.0.1:

[USB\VID_273F&PID_1004]
VersionLowest = 2.0.1

Prevent Version Upgrade

To prevent installing any higher version than 2.0.1:

[USB\VID_273F&PID_1004]
VersionHighest = 2.0.1

Prevent Version Change

To prevent installing any lower or higher version than 2.0.1:

[USB\VID_273F&PID_1004]
VersionLowest = 2.0.1
VersionHighest = 2.0.1

Skip Current Upgrade

To prevent upgrading from 2.0.1 to 2.0.2, but allowing 2.0.3 and newer:

[USB\VID_273F&PID_1004]
VersionLowest = 2.0.3