diff --git a/lxd/instance/drivers/load.go b/lxd/instance/drivers/load.go
index <HASH>..<HASH> 100644
--- a/lxd/instance/drivers/load.go
+++ b/lxd/instance/drivers/load.go
@@ -66,7 +66,8 @@ func validDevices(state *state.State, cluster *db.Cluster, instanceType instance
 	}
 
 	// Check each device individually using the device package.
-	for name, config := range devices {
+	// Use instConf.localDevices so that the cloned config is passed into the driver, so it cannot modify it.
+	for name, config := range instConf.localDevices {
 		err := device.Validate(instConf, state, name, config)
 		if err != nil {
 			return errors.Wrapf(err, "Device validation failed %q", name)
lxd/instance/drivers/load: Pass copy of device config to device.Validate

Ensures a copy of the instance's device config is passed to device.Validate to ensure devices cannot modify the source config map.

This way any internal modifications a device may make to its config map are not reflected outside of the device.

This mirrors the existing usage of device.New().