Commit Graph

1603 Commits

Author SHA1 Message Date
Richard Hughes
9c09e2c9bc trivial: Fix some recent NULL/FALSE confusion 2020-04-22 10:53:59 +01:00
Richard Hughes
f0ec4dee4d trivial: Fix a merge-conflict remnant spotted by Coverity 2020-04-21 16:46:05 +01:00
Mario Limonciello
c6009f59fe trivial: fu-util/fu-tool: check for '-' in arguments
Make sure if something doesn't look like a duck that it's not a duck.
2020-04-21 09:04:50 +01:00
Mario Limonciello
bc3c241f91 trivial: fu-util: fix using a GUID for update command 2020-04-21 09:04:50 +01:00
Mario Limonciello
9917bb44bc trivial: fu-tool: correct a reference to wrong device ID when using GUID
When finding the device by GUID we need to do a lookup first.
2020-04-20 13:42:31 -05:00
Mario Limonciello
aac9c74ec6 trivial: fu-tool: correct an infinite loop from 3aaf53c6f0 2020-04-20 13:39:17 -05:00
Richard Hughes
3aaf53c6f0 Allow specifying the device on the command line by GUID
The GUID is the only stable identifier, and allowing using the GUID makes it
much easier to test specific devices.
2020-04-20 18:45:45 +01:00
Richard Hughes
8500b4f233 Allow devices to be updatable, but only when upgrading a proxy device 2020-04-18 14:39:43 +01:00
Richard Hughes
395f936b72 Reset the progressbar time estimate if the percentage is invalid 2020-04-17 21:49:24 +01:00
Richard Hughes
86ae91c144 Add a device quirk that forces an explicit device-id match
This means we do not do the GUID or counterpart GUID matching when adding
devices. Only an exact device-id match or when both the physical and logical
IDs match will the device be considered the 'same'.

This is to handle devices that could share the same GUIDs in both child and
parent modes where the logical ID differs.
2020-04-17 21:48:59 +01:00
Mario Limonciello
e038419240 fu-engine: Refresh device name and format before setting supported flag
Cached metadata was not working for setting the supported flag because
of a difference in version format.  The version format needs to be applied
to the device before applying the supported flag.

This particularly helps UEFI devices which set the version format to number
but in practice all metadata sets it to something different.

Fixes: #2005
2020-04-16 14:57:45 -05:00
Richard Hughes
a89a70cc24 trivial: Do not set the device parent when already set to the client
This can happen if the devices swap roles, and if the parent is set as itself
then fwupdmgr refuses to show the child device.
2020-04-16 18:01:20 +01:00
Richard Hughes
ca6af0b8f1 trivial: Add some debugging on the install task queue 2020-04-16 18:01:20 +01:00
Richard Hughes
8bb6498600 trivial: Add some error prefixes to help debugging 2020-04-16 18:01:20 +01:00
Richard Hughes
10fffc7fe3 trivial: Add some tests to verify the install task ordering 2020-04-16 18:01:20 +01:00
Richard Hughes
35ca4cbc61 Allow devices to match the proxy device by GUID
This allows us to use a proxy even if the proxy device was created in a
different plugin or where the GTypes are not known to each other.
2020-04-16 15:52:34 +01:00
Richard Hughes
327621beef trivial: Remove double call to g_source_remove()
The fu_device_list_replace() function does this automatically.
2020-04-16 08:50:12 -05:00
Richard Hughes
1283c2696d Do not skip attach() if the device is marked _WILL_DISAPPEAR
The idea here is that the device would not come back after it was restarted,
and skipping the attach in the engine was only working around the fact that the
ebitdo did not split out an ->attach() function.

We can't really blame it; we only decoupled the _IS_BOOTLOADER requirement
for ->attach() recently...
2020-04-16 08:43:45 -05:00
Richard Hughes
9c1829bf36 trivial: Allow plugins to add the same physical device with different priorities
Some plugins are just simple wrappers around custom GType creators and which
specific plugin created is not a good way to make a policy decision.

If this was added to work around a bug, we need to find a better solution or
fix the root cause.
2020-04-15 14:11:06 +01:00
Richard Hughes
fecc438521 trivial: Only auto-set the device priority if not already set
If the plugin has set the priority manually do not overwrite the value.
2020-04-15 14:11:06 +01:00
Richard Hughes
4299ba0914 Do not modify the device priority for child devices
This was incorrect when were were adding child devices by GUID (as we should
have been setting the transaction *order*, not the plugin *priority*) and just
completely unused now we're using the ParentGuid to set the parent and not
adding a reference to the child.
2020-04-14 17:11:20 +01:00
Mario Limonciello
75b3904c2e trivial: show update message on downgrades too 2020-04-09 16:55:17 +01:00
Richard Hughes
2ab379e6c5 Only set the parent when adopting children
We use the ParentGuid quirk key to logically 'tie-together' different discrete
devices into one logical device, for instance making the USB soundcard in a hub
the child of the USB controller on the same PCB.

Setting the discrete child is sometimes correct, for instance when rebooting
the hub, the audio device also goes away -- but it's also sometimes wrong.
If we set the child for a discrete device and the parent does *not* go away
then we get to a situation where the child reference may no longer be valid
if it comes back as a different object.
When we try to remove this no-longer-valid device with the removal timeout the
daemon segfaults. This is realy bad.

Continue to allow using fu_device_add_child() in plugins, where we know the
child lifecycle is is matched by the the parent. In the engine just set the
weak parent directly and let the client use this information to show the tree
of logical devices correctly. There's no benefit to setting up the children as
referenced objects anyway.
2020-04-09 16:55:17 +01:00
Richard Hughes
6affeb84fc Revert "Only set the parent ID when adopting children"
This reverts commit b4f14e8f0f.
2020-04-09 16:55:17 +01:00
Richard Hughes
f6b4d92dae Revert "Fix a crash when removing device parents"
We add the child devices using fu_plugin_device_add() so we have to remove them
the same way. The original fix is wrong, as it leaves child devices when the
parent is removed.

This reverts commit 02b588c035.
2020-04-09 15:46:41 +01:00
Richard Hughes
6c0e3d4efa Do not crash the daemon if a plugin does something dumb
In this case, a plugin was doing:

    g_autoptr(FuDevice) parent = fu_device_get_parent (device);

Which is not valid as it is `(transfer none)` but that shouldn't be enough to
get the daemon to crash. If the FuDevice refcount drops to zero just print
a critical warning with the pointer (no FuDevice details are available) and
remove the FuDeviceItem from the device list.

Using `G_DEBUG=fatal-criticals` it is very easy to backtrace at the right place
and find out which naughty plugin needs to go on the thinking spot.
2020-04-08 17:40:08 +01:00
Richard Hughes
02b588c035 Fix a crash when removing device parents
This was missed for the conversion of 1e571730d0
2020-04-08 15:29:12 +01:00
Richard Hughes
cddf5b5b89 Only auto-add counterpart GUIDs when required
Doing this unconditionally means we accidentally 'bleed' one device mode into
another in a non-obvious way. For instance, a device might have two operating
modes with different GUIDs. If firmware is supplied for both modes in the same
cabinet archive then we might accidentally match the 'wrong' firmware when
the daemon has observed a mode switch and added the counterpart GUIDs.

We only really need the counterpart GUIDs when switching between Jabra, 8bitdo
and DFU devices where the DFU bootloader VID:PID is not manually tagged with
`CounterpartGuid` in a quirk file. In the general case lets keep it simple to
avoid difficult to find bugs.
2020-04-08 13:55:39 +01:00
Richard Hughes
ee562b5164 Ignore indirect devices that replug during the composite firmware update
This fixes the confusing case where installing the CCGX firmware on a dock
would reboot the hub, leading to this output:

Installing on USB-I2C Bridge…                                    ]
Installing on USB2.0 Hub…[************************************** ]
Installing on USB3.1 Hub…[************************************** ]
Installing on USB2.0 Hub…[************************************** ]
Installing on USB3.1 Hub…[************************************** ]
Installing on ThinkPad USB-C Dock Gen2 USB Audio…*************** ]
Installing on USB-I2C Bridge…*********************************** ]
Restarting device…       [***************************************]

With the patch, this is now:

Installing on USB-I2C Bridge…                                    ]
Restarting device…       [***************************************]
2020-04-07 15:04:01 +01:00
Richard Hughes
949af578ea Fix devices that use CounterpartGuid when more than one device is installed
Rather than return the first device with a matching counterpart GUID, and then
check to see if it was removed -- instead just return any item that matches and
has been removed.

This fixes updating the Logitech unifying receiver when more than one type of
device (e.g. RQR12 and RQR24) are connected.
2020-04-07 14:44:06 +01:00
Richard Hughes
66dc7362e8 Use the GUID as a fallback rather than the connection ID
Prefer a removed device with the same physical and logitcal connection than a
GUID fallback.
2020-04-07 14:44:06 +01:00
Richard Hughes
f1fa73e349 trivial: Allow using --force with install-blob 2020-04-06 14:36:46 -05:00
Richard Hughes
58f85d26ea trivial: Recognize .jcat files as a signature to fix CLI progress message 2020-04-03 16:29:56 +01:00
Richard Hughes
a1de20665a Load the signature to get the aliased CDN-safe version of the metadata
Switch to downloading the signature first, which we can then load to get the
suffixed build-specific URL of the actual metadata file. You need to have
libjcat 0.1.1 installed and fwupd built against the new version for this to
work.

Fixes https://github.com/fwupd/fwupd/issues/391
2020-04-03 16:27:04 +01:00
Mario Limonciello
7a9bb7e7a7 trivial: Add a new category for CPU microcode 2020-04-02 12:18:01 -05:00
Richard Hughes
52c1a4d38e Export the release urgency
Show it in the various command line tools if it has been set by the vendor.
2020-04-02 13:22:07 +01:00
Richard Hughes
14797f8a86 Export the release creation time
Show it in the various command line tools if it has been set by the vendor.

Fixes https://github.com/fwupd/fwupd/issues/1945
2020-04-02 13:22:07 +01:00
Richard Hughes
1ee1800240 Check the firmware requirements before adding SUPPORTED 2020-04-01 13:58:31 -05:00
Richard Hughes
b4f14e8f0f Only set the parent ID when adopting children
We use the ParentGuid quirk key to logically 'tie-together' different discrete
devices into one logical device, for instance making the USB soundcard in a hub
the child of the USB controller on the same PCB.

Setting the discrete child is sometimes correct, for instance when rebooting
the hub, the audio device also goes away -- but it's also sometimes wrong.
If we set the child for a discrete device and the parent does *not* go away
then we get to a situation where the child reference may no longer be valid
if it comes back as a different object.
When we try to remove this no-longer-valid device with the removal timeout the
daemon segfaults. This is realy bad.

Continue to allow using fu_device_add_child() in plugins, where we know the
child lifecycle is is matched by the the parent. In the engine just set the
parent ID directly and let the client use this information to show the tree of
logical devices correctly. There's no benefit to setting up the children as
referenced objects anyway.
2020-04-01 10:38:50 +01:00
Mario Limonciello
3dbb92e5d5 trivial: fu-config: Fix behavior for UpdateMotd key
If the file was missing or corrupted the default behavior for this
key should be "TRUE".
2020-03-31 13:05:57 -05:00
Mario Limonciello
4fa95a7b51 Add a new daemon configuration option to control EnumerateAllDevices
For plugins that are configured to only enumerate devices supported
by metadata this will allow showing them in all contexts

Fixes: #1877
2020-03-31 13:05:57 -05:00
Richard Hughes
aeb59af206 trivial: Remove a FIXME in the verbose log 2020-03-31 12:13:51 +01:00
Filipe Laíns
b2f377a00c fu-tool: add reinstall command
Closes #1914

Signed-off-by: Filipe Laíns <lains@archlinux.org>
2020-03-31 10:46:40 +01:00
Filipe Laíns
d3a4fd3e1c fu-engine: export fu_engine_get_releases_for_device in header
Signed-off-by: Filipe Laíns <lains@archlinux.org>
2020-03-31 10:46:40 +01:00
Richard Hughes
fe4b3eadaa trivial: Use the same source version string between daemon and client
This fixes the common problem encountered when developing plugins:

    ./src/fwupdmgr get-devices
    Unsupported daemon version 1.4.0, client version is 1.4.0-179-gcf8095d5
2020-03-30 13:58:25 +01:00
Richard Hughes
d5aab65f30 Use Jcat files in firmware archives and for metadata
A Jcat file can be used to store GPG, PKCS-7 and SHA-256 checksums for multiple
files. This allows us to sign a firmware or metadata multiple times (perhaps
by the OEM and also then the LVFS) which further decentralizes the trust model
of the LVFS.

The Jcat format was chosen as the Microsoft catalog format is nonfree and not
documented. We also don't want to modify an existing .cat file created from WU
as this may make it unsuitable to use on Windows.

More information can be found here: https://github.com/hughsie/libjcat
2020-03-23 19:55:12 +00:00
Richard Hughes
09a4f7559c Add the optional device-id to the update --help output
Fixes https://github.com/fwupd/fwupd/issues/1870
2020-03-17 13:03:16 +00:00
Richard Hughes
2c9445281a Fix a difficult-to-trigger daemon hang when replugging devices
Use only one GMainLoop in FuDeviceList; we can only iterate one loop at a time
anyway, and having the mainloops per-item complicates the lifecycle of the
fu_device_list_wait_for_replug() functionality considerably.
2020-03-17 13:02:54 +00:00
Mario Limonciello
92ff9c7b93 Apply version format to releases and devices at same time 2020-03-10 14:31:16 -05:00
Richard Hughes
1e571730d0 Fix a daemon crash when removing children
If the device has a child with a longer remove_delay we actually crash because
the FuDeviceList tries to remove the child device twice. Just remove all the
children when the parent remove delay elapsed rather than set up each device
with a unique timeout.
2020-03-10 17:09:13 +00:00