Repository: lima-vm/lima
Pull request #3115 (2025-01-14 10:42:52)

Add validation for additionalDisks
```
change validation to ensure that only Disk type values are allowed in the AdditionalDisks field.
```

Fixes [#3071](https://github.com/lima-vm/lima/issues/3071)


Patch:
diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml
index 6d0d0dac..0955dfc0 100644
--- a/.github/workflows/codeql.yaml
+++ b/.github/workflows/codeql.yaml
@@ -32,7 +32,7 @@ jobs:
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
 
     - name: Initialize CodeQL
-      uses: github/codeql-action/init@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c  # v3.28.1
+      uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169  # v3.28.0
       with:
         languages: ${{ matrix.language }}
         build-mode: ${{ matrix.build-mode }}
@@ -48,6 +48,6 @@ jobs:
         exit 1
 
     - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c  # v3.28.1
+      uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169  # v3.28.0
       with:
         category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f5d427ab..b41da57f 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -43,7 +43,7 @@ jobs:
     - name: Make darwin artifacts
       run: make artifacts-darwin
     - name: "Upload artifacts"
-      uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08  # v4.6.0
+      uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b  # v4.5.0
       with:
         name: artifacts-darwin
         path: _artifacts/
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index b8ef4530..0e037d1d 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -51,7 +51,7 @@ jobs:
     # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
     # format to the repository Actions tab.
     - name: "Upload artifact"
-      uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08  # v3.pre.node20
+      uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b  # v3.pre.node20
       with:
         name: SARIF file
         path: results.sarif
@@ -60,6 +60,6 @@ jobs:
     # Upload the results to GitHub's code scanning dashboard (optional).
     # Commenting out will disable upload of results to your repo's Code Scanning dashboard
     - name: "Upload to code-scanning"
-      uses: github/codeql-action/upload-sarif@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c  # v3.28.1
+      uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169  # v3.28.0
       with:
         sarif_file: results.sarif
diff --git a/.golangci.yml b/.golangci.yml
index da0eb215..5e4c3334 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -153,7 +153,6 @@ linters-settings:
     - name: unexported-return
     - name: unreachable-code
     - name: unused-parameter
-    - name: use-any
     - name: var-declaration
     - name: var-naming
   staticcheck:
diff --git a/cmd/limactl/genschema.go b/cmd/limactl/genschema.go
index 1ad574bb..7d166847 100644
--- a/cmd/limactl/genschema.go
+++ b/cmd/limactl/genschema.go
@@ -88,7 +88,7 @@ func genschemaAction(cmd *cobra.Command, args []string) error {
 		if err != nil {
 			return err
 		}
-		var y any
+		var y interface{}
 		err = yaml.Unmarshal(b, &y)
 		if err != nil {
 			return err
diff --git a/go.mod b/go.mod
index 1f79530f..13235809 100644
--- a/go.mod
+++ b/go.mod
@@ -10,12 +10,12 @@ require (
 	github.com/apparentlymart/go-cidr v1.1.0
 	github.com/balajiv113/fd v0.0.0-20230330094840-143eec500f3e
 	github.com/cheggaaa/pb/v3 v3.1.5
-	github.com/containerd/containerd v1.7.25
+	github.com/containerd/containerd v1.7.24
 	github.com/containerd/continuity v0.4.5
 	github.com/containers/gvisor-tap-vsock v0.8.1
 	github.com/coreos/go-semver v0.3.1
 	github.com/cpuguy83/go-md2man/v2 v2.0.6
-	github.com/cyphar/filepath-securejoin v0.4.0
+	github.com/cyphar/filepath-securejoin v0.3.6
 	github.com/digitalocean/go-qemu v0.0.0-20221209210016-f035778c97f7
 	github.com/diskfs/go-diskfs v1.4.1
 	github.com/docker/go-units v0.5.0
@@ -23,7 +23,7 @@ require (
 	github.com/foxcpp/go-mockdns v1.1.0
 	github.com/goccy/go-yaml v1.15.13
 	github.com/google/go-cmp v0.6.0
-	github.com/google/yamlfmt v0.15.0
+	github.com/google/yamlfmt v0.14.0
 	github.com/invopop/jsonschema v0.13.0
 	github.com/lima-vm/go-qcow2reader v0.6.0
 	github.com/lima-vm/sshocker v0.3.5
@@ -31,7 +31,7 @@ require (
 	github.com/mattn/go-shellwords v1.0.12
 	github.com/mdlayher/vsock v1.2.1
 	github.com/miekg/dns v1.1.62
-	github.com/mikefarah/yq/v4 v4.45.1
+	github.com/mikefarah/yq/v4 v4.44.6
 	github.com/nxadm/tail v1.4.11
 	github.com/opencontainers/go-digest v1.0.0
 	github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58
@@ -46,7 +46,7 @@ require (
 	golang.org/x/sync v0.10.0
 	golang.org/x/sys v0.29.0
 	golang.org/x/text v0.21.0
-	google.golang.org/grpc v1.69.4
+	google.golang.org/grpc v1.69.2
 	google.golang.org/protobuf v1.36.2
 	gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473
 	gotest.tools/v3 v3.5.1
@@ -62,7 +62,7 @@ require (
 	github.com/alecthomas/participle/v2 v2.1.1 // indirect
 	github.com/areYouLazy/libhosty v1.1.0 // indirect
 	github.com/bahlo/generic-list-go v0.2.0 // indirect
-	github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect
+	github.com/bmatcuk/doublestar/v4 v4.6.0 // indirect
 	github.com/braydonk/yaml v0.7.0 // indirect
 	github.com/buger/jsonparser v1.1.1 // indirect
 	github.com/containerd/errdefs v0.3.0 // indirect
@@ -71,7 +71,7 @@ require (
 	github.com/digitalocean/go-libvirt v0.0.0-20220804181439-8648fbde413e // indirect
 	github.com/dimchansky/utfbom v1.1.1 // indirect
 	github.com/djherbis/times v1.6.0 // indirect
-	github.com/elliotchance/orderedmap v1.7.1 // indirect
+	github.com/elliotchance/orderedmap v1.7.0 // indirect
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 	github.com/fatih/color v1.18.0 // indirect
 	github.com/fsnotify/fsnotify v1.8.0 // indirect
@@ -80,7 +80,7 @@ require (
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 	github.com/go-openapi/jsonreference v0.20.2 // indirect
 	github.com/go-openapi/swag v0.22.4 // indirect
-	github.com/goccy/go-json v0.10.4 // indirect
+	github.com/goccy/go-json v0.10.3 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/google/btree v1.1.2 // indirect
@@ -97,7 +97,7 @@ require (
 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
 	github.com/kr/fs v0.1.0 // indirect
 	github.com/linuxkit/virtsock v0.0.0-20220523201153-1a23e78aa7a2 // indirect
-	github.com/magiconair/properties v1.8.9 // indirect
+	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-runewidth v0.0.15 // indirect
diff --git a/go.sum b/go.sum
index 0c3fe58a..43b37eae 100644
--- a/go.sum
+++ b/go.sum
@@ -28,16 +28,16 @@ github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPn
 github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
 github.com/balajiv113/fd v0.0.0-20230330094840-143eec500f3e h1:IdMhFPEfTZQU971tIHx3UhY4l+yCeynprnINrDTSrOc=
 github.com/balajiv113/fd v0.0.0-20230330094840-143eec500f3e/go.mod h1:aXGMJsd3XrnUFTuyf/pTGg5jG6CY8JMZ5juywvShjgQ=
-github.com/bmatcuk/doublestar/v4 v4.7.1 h1:fdDeAqgT47acgwd9bd9HxJRDmc9UAmPpc+2m0CXv75Q=
-github.com/bmatcuk/doublestar/v4 v4.7.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
+github.com/bmatcuk/doublestar/v4 v4.6.0 h1:HTuxyug8GyFbRkrffIpzNCSK4luc0TY3wzXvzIZhEXc=
+github.com/bmatcuk/doublestar/v4 v4.6.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
 github.com/braydonk/yaml v0.7.0 h1:ySkqO7r0MGoCNhiRJqE0Xe9yhINMyvOAB3nFjgyJn2k=
 github.com/braydonk/yaml v0.7.0/go.mod h1:hcm3h581tudlirk8XEUPDBAimBPbmnL0Y45hCRl47N4=
 github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
 github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
 github.com/cheggaaa/pb/v3 v3.1.5 h1:QuuUzeM2WsAqG2gMqtzaWithDJv0i+i6UlnwSCI4QLk=
 github.com/cheggaaa/pb/v3 v3.1.5/go.mod h1:CrxkeghYTXi1lQBEI7jSn+3svI3cuc19haAj6jM60XI=
-github.com/containerd/containerd v1.7.25 h1:khEQOAXOEJalRO228yzVsuASLH42vT7DIo9Ss+9SMFQ=
-github.com/containerd/containerd v1.7.25/go.mod h1:tWfHzVI0azhw4CT2vaIjsb2CoV4LJ9PrMPaULAr21Ok=
+github.com/containerd/containerd v1.7.24 h1:zxszGrGjrra1yYJW/6rhm9cJ1ZQ8rkKBR48brqsa7nA=
+github.com/containerd/containerd v1.7.24/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw=
 github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
 github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
 github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4=
@@ -54,8 +54,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
 github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
-github.com/cyphar/filepath-securejoin v0.4.0 h1:PioTG9TBRSApBpYGnDU8HC+miIsX8vitBH9LGNNMoLQ=
-github.com/cyphar/filepath-securejoin v0.4.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
+github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM=
+github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -78,8 +78,8 @@ github.com/elastic/go-libaudit/v2 v2.6.1 h1:eN7tobGizmB+OJpCuG7gvPX7Nxni//H47uvM
 github.com/elastic/go-libaudit/v2 v2.6.1/go.mod h1:8205nkf2oSrXFlO4H5j8/cyVMoSF3Y7jt+FjgS4ubQU=
 github.com/elastic/go-licenser v0.4.1 h1:1xDURsc8pL5zYT9R29425J3vkHdt4RT5TNEMeRN48x4=
 github.com/elastic/go-licenser v0.4.1/go.mod h1:V56wHMpmdURfibNBggaSBfqgPxyT1Tldns1i87iTEvU=
-github.com/elliotchance/orderedmap v1.7.1 h1:8SR2DB391dw0HVI9572ElrY+KU0Q89OCXYwWZx7aAZc=
-github.com/elliotchance/orderedmap v1.7.1/go.mod h1:wsDwEaX5jEoyhbs7x93zk2H/qv0zwuhg4inXhDkYqys=
+github.com/elliotchance/orderedmap v1.7.0 h1:FirjcM/NbcyudJhaIF9MG/RjIh5XHm2xb1SFquZ8k0g=
+github.com/elliotchance/orderedmap v1.7.0/go.mod h1:wsDwEaX5jEoyhbs7x93zk2H/qv0zwuhg4inXhDkYqys=
 github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab h1:h1UgjJdAAhj+uPL68n7XASS6bU+07ZX1WJvVS2eyoeY=
 github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab/go.mod h1:GLo/8fDswSAniFG+BFIaiSPcK610jyzgEhWYPQwuQdw=
 github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
@@ -108,8 +108,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
 github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
 github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
-github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM=
-github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
+github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
+github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
 github.com/goccy/go-yaml v1.15.13 h1:Xd87Yddmr2rC1SLLTm2MNDcTjeO/GYo0JGiww6gSTDg=
 github.com/goccy/go-yaml v1.15.13/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -134,8 +134,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/yamlfmt v0.15.0 h1:8VqeHp87EEyfAeCTp3QpV/8bnhDh04jKN6EeifiTM70=
-github.com/google/yamlfmt v0.15.0/go.mod h1:MPmHSVetV8ofpKmeiEZAh2p4jbDapC+FNqilNN7JQVk=
+github.com/google/yamlfmt v0.14.0 h1:30Hm8+VfNqMhWfbkjqkHMyo1zzbxMFM6+2oz7Cey1BQ=
+github.com/google/yamlfmt v0.14.0/go.mod h1:KnrVZqRVSE3HUpaI9FfoaxYA71izVleMWPYX8s1S0KM=
 github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
 github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
 github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
@@ -177,8 +177,8 @@ github.com/lima-vm/sshocker v0.3.5 h1:1QNs6hVT4ZzZpifaWwe8WrDfi3zmdpHS6rA61Ao6/k
 github.com/lima-vm/sshocker v0.3.5/go.mod h1:FOw9S/jgmasbcTUhreVS3fAZB9LEo7CZhYZ0+y34bEQ=
 github.com/linuxkit/virtsock v0.0.0-20220523201153-1a23e78aa7a2 h1:DZMFueDbfz6PNc1GwDRA8+6lBx1TB9UnxDQliCqR73Y=
 github.com/linuxkit/virtsock v0.0.0-20220523201153-1a23e78aa7a2/go.mod h1:SWzULI85WerrFt3u+nIm5F9l7EvxZTKQvd0InF3nmgM=
-github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
-github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -203,8 +203,8 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyex
 github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
 github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
 github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
-github.com/mikefarah/yq/v4 v4.45.1 h1:EW+HjKEVa55pUYFJseEHEHdQ0+ulunY+q42zF3M7ZaQ=
-github.com/mikefarah/yq/v4 v4.45.1/go.mod h1:djgN2vD749hpjVNGYTShr5Kmv5LYljhCG3lUTuEe3LM=
+github.com/mikefarah/yq/v4 v4.44.6 h1:yuu+sH3KX1R3pQCP/vsDao8uNcuiXcjvC7XtoekCV0g=
+github.com/mikefarah/yq/v4 v4.44.6/go.mod h1:sva/xvSlW4mKRtRm9nwIS40A+LqNbl46ezjBHYyFtLo=
 github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
 github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -414,8 +414,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
-google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
-google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
+google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
+google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
 google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU=
 google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/pkg/cidata/cidata.TEMPLATE.d/boot/30-install-packages.sh b/pkg/cidata/cidata.TEMPLATE.d/boot/30-install-packages.sh
index 8ede9790..c24e8780 100644
--- a/pkg/cidata/cidata.TEMPLATE.d/boot/30-install-packages.sh
+++ b/pkg/cidata/cidata.TEMPLATE.d/boot/30-install-packages.sh
@@ -56,14 +56,12 @@ if head -c 4 "$(command -v apt-get)" | grep -qP '\x7fELF' >/dev/null 2>&1; then
 	fi
 elif command -v dnf >/dev/null 2>&1; then
 	pkgs=""
-	extrapkgs=""
 	if ! command -v tar >/dev/null 2>&1; then
 		pkgs="${pkgs} tar"
 	fi
 	if [ "${LIMA_CIDATA_MOUNTTYPE}" = "reverse-sshfs" ]; then
 		if [ "${LIMA_CIDATA_MOUNTS}" -gt 0 ] && ! command -v sshfs >/dev/null 2>&1; then
-			# fuse-sshfs is not included in EL
-			extrapkgs="${extrapkgs} fuse-sshfs"
+			pkgs="${pkgs} fuse-sshfs"
 		fi
 	fi
 	if [ "${INSTALL_IPTABLES}" = 1 ] && [ ! -e /usr/sbin/iptables ]; then
@@ -77,9 +75,8 @@ elif command -v dnf >/dev/null 2>&1; then
 			pkgs="${pkgs} fuse3"
 		fi
 	fi
-	if [ -n "${pkgs}" ] || [ -n "${extrapkgs}" ]; then
+	if [ -n "${pkgs}" ]; then
 		dnf_install_flags="-y --setopt=install_weak_deps=False"
-		epel_install_flags=""
 		if grep -q "Oracle Linux Server release 8" /etc/system-release; then
 			# repo flag instead of enable repo to reduce metadata syncing on slow Oracle repos
 			dnf_install_flags="${dnf_install_flags} --repo ol8_baseos_latest --repo ol8_codeready_builder"
@@ -89,22 +86,15 @@ elif command -v dnf >/dev/null 2>&1; then
 			# shellcheck disable=SC2086
 			dnf install ${dnf_install_flags} oracle-epel-release-el9
 			dnf config-manager --disable ol9_developer_EPEL >/dev/null 2>&1
-			epel_install_flags="${epel_install_flags} --enablerepo ol9_developer_EPEL"
+			dnf_install_flags="${dnf_install_flags} --enablerepo ol9_developer_EPEL"
 		elif grep -q -E "release (9|10)" /etc/system-release; then
 			# shellcheck disable=SC2086
 			dnf install ${dnf_install_flags} epel-release
-			# Disable the OpenH264 repository as well, by default
-			dnf config-manager --disable epel\* >/dev/null 2>&1
-			epel_install_flags="${epel_install_flags} --enablerepo epel"
-		fi
-		if [ -n "${pkgs}" ]; then
-			# shellcheck disable=SC2086
-			dnf install ${dnf_install_flags} ${pkgs}
-		fi
-		if [ -n "${extrapkgs}" ]; then
-			# shellcheck disable=SC2086
-			dnf install ${dnf_install_flags} ${epel_install_flags} ${extrapkgs}
+			dnf config-manager --disable epel >/dev/null 2>&1
+			dnf_install_flags="${dnf_install_flags} --enablerepo epel"
 		fi
+		# shellcheck disable=SC2086
+		dnf install ${dnf_install_flags} ${pkgs}
 	fi
 	if [ "${LIMA_CIDATA_CONTAINERD_USER}" = 1 ] && [ ! -e /usr/bin/fusermount ]; then
 		# Workaround for https://github.com/containerd/stargz-snapshotter/issues/340
diff --git a/pkg/instance/ansible.go b/pkg/instance/ansible.go
index 28d40085..53460fa7 100644
--- a/pkg/instance/ansible.go
+++ b/pkg/instance/ansible.go
@@ -39,17 +39,17 @@ func runAnsiblePlaybook(ctx context.Context, inst *store.Instance, playbook stri
 }
 
 func createAnsibleInventory(inst *store.Instance) (string, error) {
-	vars := map[string]any{
+	vars := map[string]interface{}{
 		"ansible_connection":      "ssh",
 		"ansible_host":            inst.Hostname,
 		"ansible_ssh_common_args": "-F " + inst.SSHConfigFile,
 	}
-	hosts := map[string]any{
+	hosts := map[string]interface{}{
 		inst.Name: vars,
 	}
 	group := "lima"
-	data := map[string]any{
-		group: map[string]any{
+	data := map[string]interface{}{
+		group: map[string]interface{}{
 			"hosts": hosts,
 		},
 	}
diff --git a/pkg/limayaml/defaults.go b/pkg/limayaml/defaults.go
index 69e96f33..2ff76cbc 100644
--- a/pkg/limayaml/defaults.go
+++ b/pkg/limayaml/defaults.go
@@ -886,7 +886,7 @@ func executeGuestTemplate(format, instDir string, user User, param map[string]st
 	tmpl, err := template.New("").Parse(format)
 	if err == nil {
 		name := filepath.Base(instDir)
-		data := map[string]any{
+		data := map[string]interface{}{
 			"Name":     name,
 			"Hostname": identifierutil.HostnameFromInstName(name), // TODO: support customization
 			"UID":      *user.UID,
@@ -906,7 +906,7 @@ func executeHostTemplate(format, instDir string, param map[string]string) (bytes
 	tmpl, err := template.New("").Parse(format)
 	if err == nil {
 		limaHome, _ := dirnames.LimaDir()
-		data := map[string]any{
+		data := map[string]interface{}{
 			"Dir":  instDir,
 			"Name": filepath.Base(instDir),
 			// TODO: add hostname fields for the host and the guest
diff --git a/pkg/limayaml/marshal.go b/pkg/limayaml/marshal.go
index afbecc68..9e390b63 100644
--- a/pkg/limayaml/marshal.go
+++ b/pkg/limayaml/marshal.go
@@ -35,7 +35,7 @@ func unmarshalDisk(dst *Disk, b []byte) error {
 	return yaml.Unmarshal(b, dst)
 }
 
-func Unmarshal(data []byte, v any, comment string) error {
+func Unmarshal(data []byte, v interface{}, comment string) error {
 	if err := yaml.UnmarshalWithOptions(data, v, yaml.CustomUnmarshaler[Disk](unmarshalDisk)); err != nil {
 		return fmt.Errorf("failed to unmarshal YAML (%s): %w", comment, err)
 	}
@@ -45,7 +45,9 @@ func Unmarshal(data []byte, v any, comment string) error {
 		return fmt.Errorf("failed to unmarshal YAML (%s): %w", comment, err)
 	}
 	if err := yaml.UnmarshalWithOptions(data, v, yaml.Strict(), yaml.CustomUnmarshaler[Disk](unmarshalDisk)); err != nil {
-		logrus.WithField("comment", comment).WithError(err).Warn("Non-strict YAML detected; please check for typos")
+		logrus.WithField("comment", comment).WithError(err).Warn("Non-strict YAML is deprecated and will be unsupported in a future version of Lima")
+		// Non-strict YAML is known to be used by Rancher Desktop:
+		// https://github.com/rancher-sandbox/rancher-desktop/blob/c7ea7508a0191634adf16f4675f64c73198e8d37/src/backend/lima.ts#L114-L117
 	}
 	return nil
 }
diff --git a/pkg/limayaml/validate.go b/pkg/limayaml/validate.go
index 72f2799e..2bc8ad4b 100644
--- a/pkg/limayaml/validate.go
+++ b/pkg/limayaml/validate.go
@@ -12,6 +12,7 @@ import (
 	"strings"
 	"unicode"
 
+	"github.com/containerd/containerd/identifiers"
 	"github.com/coreos/go-semver/semver"
 	"github.com/docker/go-units"
 	"github.com/lima-vm/lima/pkg/localpathutil"
@@ -136,6 +137,12 @@ func Validate(y *LimaYAML, warn bool) error {
 		return fmt.Errorf("field `memory` has an invalid value: %w", err)
 	}
 
+	for i, disk := range y.AdditionalDisks {
+		if err := identifiers.Validate(disk.Name); err != nil {
+			return fmt.Errorf("field `additionalDisks[%d].name is invalid`: %w", i, err)
+		}
+	}
+
 	for i, f := range y.Mounts {
 		if !filepath.IsAbs(f.Location) && !strings.HasPrefix(f.Location, "~") {
 			return fmt.Errorf("field `mounts[%d].location` must be an absolute path, got %q",
diff --git a/pkg/osutil/dns_darwin.go b/pkg/osutil/dns_darwin.go
index a1949cb9..4bcb6057 100644
--- a/pkg/osutil/dns_darwin.go
+++ b/pkg/osutil/dns_darwin.go
@@ -25,7 +25,7 @@ func DNSAddresses() ([]string, error) {
 	return addresses, nil
 }
 
-func proxyURL(proxy string, port any) string {
+func proxyURL(proxy string, port interface{}) string {
 	if strings.Contains(proxy, "://") {
 		if portNumber, ok := port.(float64); ok && portNumber != 0 {
 			proxy = fmt.Sprintf("%s:%.0f", proxy, portNumber)
diff --git a/pkg/qemu/qemu_driver.go b/pkg/qemu/qemu_driver.go
index f33151aa..55936956 100644
--- a/pkg/qemu/qemu_driver.go
+++ b/pkg/qemu/qemu_driver.go
@@ -411,8 +411,8 @@ func (a *qArgTemplateApplier) applyTemplate(qArg string) (string, error) {
 		return qArg, nil
 	}
 	funcMap := template.FuncMap{
-		"fd_connect": func(v any) string {
-			fn := func(v any) (string, error) {
+		"fd_connect": func(v interface{}) string {
+			fn := func(v interface{}) (string, error) {
 				s, ok := v.(string)
 				if !ok {
 					return "", fmt.Errorf("non-string argument %+v", v)
diff --git a/pkg/reflectutil/reflectutil.go b/pkg/reflectutil/reflectutil.go
index 7cdd5f5a..eaf1a842 100644
--- a/pkg/reflectutil/reflectutil.go
+++ b/pkg/reflectutil/reflectutil.go
@@ -19,7 +19,7 @@ import (
 	"reflect"
 )
 
-func UnknownNonEmptyFields(structOrStructPtr any, knownNames ...string) []string {
+func UnknownNonEmptyFields(structOrStructPtr interface{}, knownNames ...string) []string {
 	var unknown []string
 	knownNamesMap := make(map[string]struct{}, len(knownNames))
 	for _, name := range knownNames {
diff --git a/pkg/sysprof/network_darwin.go b/pkg/sysprof/network_darwin.go
index 87871adb..3e223a35 100644
--- a/pkg/sysprof/network_darwin.go
+++ b/pkg/sysprof/network_darwin.go
@@ -20,17 +20,17 @@ type IPv4 struct {
 }
 
 type Proxies struct {
-	ExceptionList []string `json:"ExceptionList"` // default: ["*.local", "169.254/16"]
-	FTPEnable     string   `json:"FTPEnable"`
-	FTPPort       any      `json:"FTPPort"`
-	FTPProxy      string   `json:"FTPProxy"`
-	FTPUser       string   `json:"FTPUser"`
-	HTTPEnable    string   `json:"HTTPEnable"`
-	HTTPPort      any      `json:"HTTPPort"`
-	HTTPProxy     string   `json:"HTTPProxy"`
-	HTTPUser      string   `json:"HTTPUser"`
-	HTTPSEnable   string   `json:"HTTPSEnable"`
-	HTTPSPort     any      `json:"HTTPSPort"`
-	HTTPSProxy    string   `json:"HTTPSProxy"`
-	HTTPSUser     string   `json:"HTTPSUser"`
+	ExceptionList []string    `json:"ExceptionList"` // default: ["*.local", "169.254/16"]
+	FTPEnable     string      `json:"FTPEnable"`
+	FTPPort       interface{} `json:"FTPPort"`
+	FTPProxy      string      `json:"FTPProxy"`
+	FTPUser       string      `json:"FTPUser"`
+	HTTPEnable    string      `json:"HTTPEnable"`
+	HTTPPort      interface{} `json:"HTTPPort"`
+	HTTPProxy     string      `json:"HTTPProxy"`
+	HTTPUser      string      `json:"HTTPUser"`
+	HTTPSEnable   string      `json:"HTTPSEnable"`
+	HTTPSPort     interface{} `json:"HTTPSPort"`
+	HTTPSProxy    string      `json:"HTTPSProxy"`
+	HTTPSUser     string      `json:"HTTPSUser"`
 }
diff --git a/pkg/textutil/textutil.go b/pkg/textutil/textutil.go
index 26b4ce17..c536cab1 100644
--- a/pkg/textutil/textutil.go
+++ b/pkg/textutil/textutil.go
@@ -12,7 +12,7 @@ import (
 )
 
 // ExecuteTemplate executes a text/template template.
-func ExecuteTemplate(tmpl string, args any) ([]byte, error) {
+func ExecuteTemplate(tmpl string, args interface{}) ([]byte, error) {
 	x, err := template.New("").Parse(tmpl)
 	if err != nil {
 		return nil, err
@@ -56,7 +56,7 @@ func MissingString(message, text string) string {
 
 // TemplateFuncMap is a text/template FuncMap.
 var TemplateFuncMap = template.FuncMap{
-	"json": func(v any) string {
+	"json": func(v interface{}) string {
 		var b bytes.Buffer
 		enc := json.NewEncoder(&b)
 		enc.SetEscapeHTML(false)
@@ -65,7 +65,7 @@ var TemplateFuncMap = template.FuncMap{
 		}
 		return strings.TrimSuffix(b.String(), "\n")
 	},
-	"yaml": func(v any) string {
+	"yaml": func(v interface{}) string {
 		var b bytes.Buffer
 		enc := yaml.NewEncoder(&b)
 		if err := enc.Encode(v); err != nil {
@@ -73,7 +73,7 @@ var TemplateFuncMap = template.FuncMap{
 		}
 		return "---\n" + strings.TrimSuffix(b.String(), "\n")
 	},
-	"indent": func(a ...any) (string, error) {
+	"indent": func(a ...interface{}) (string, error) {
 		if len(a) == 0 {
 			return "", errors.New("function takes at least one string argument")
 		}
@@ -93,7 +93,7 @@ var TemplateFuncMap = template.FuncMap{
 		}
 		return IndentString(size, text), nil
 	},
-	"missing": func(a ...any) (string, error) {
+	"missing": func(a ...interface{}) (string, error) {
 		if len(a) == 0 {
 			return "", errors.New("function takes at least one string argument")
 		}
diff --git a/pkg/yqutil/yqutil.go b/pkg/yqutil/yqutil.go
index 31e62025..cd0f0ddd 100644
--- a/pkg/yqutil/yqutil.go
+++ b/pkg/yqutil/yqutil.go
@@ -101,7 +101,7 @@ func Join(yqExprs []string) string {
 
 func yamlfmtBasicFormatter() (*basic.BasicFormatter, error) {
 	factory := basic.BasicFormatterFactory{}
-	config := map[string]any{
+	config := map[string]interface{}{
 		"indentless_arrays":         true,
 		"line_ending":               "lf", // prefer LF even on Windows
 		"pad_line_comments":         2,
diff --git a/website/hugo.toml b/website/hugo.toml
index 8c2d5ef5..22fef62a 100644
--- a/website/hugo.toml
+++ b/website/hugo.toml
@@ -125,6 +125,10 @@ offlineSearch = true
 # Enable syntax highlighting and copy buttons on code blocks with Prism
 prism_syntax_highlighting = false
 
+[[params.versions]]
+version = "master"
+url = "https://lima-vm.io"
+
 # User interface configuration
 [params.ui]
 #  Set to true to disable breadcrumb navigation.
@@ -184,9 +188,6 @@ enable = false
 [[menus.main]]
   name = "Community"
   url = "/docs/community"
-[[menus.main]]
-  name = "Releases"
-  url = "https://github.com/lima-vm/lima/releases"  
 
 [module]
   # uncomment line below for temporary local development of module


Test patch:
diff --git a/pkg/guestagent/kubernetesservice/kubernetesservice_test.go b/pkg/guestagent/kubernetesservice/kubernetesservice_test.go
index c1ff43cb..8d84b509 100644
--- a/pkg/guestagent/kubernetesservice/kubernetesservice_test.go
+++ b/pkg/guestagent/kubernetesservice/kubernetesservice_test.go
@@ -28,7 +28,7 @@ func TestGetPorts(t *testing.T) {
 	kubeClient, informerFactory := newFakeKubeClient()
 	serviceInformer := informerFactory.Core().V1().Services().Informer()
 	_, err := serviceInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
-		AddFunc: func(any) { serviceCreatedCh <- struct{}{} },
+		AddFunc: func(interface{}) { serviceCreatedCh <- struct{}{} },
 	})
 	assert.NilError(t, err)
 	informerFactory.Start(ctx.Done())
diff --git a/pkg/limayaml/limayaml_test.go b/pkg/limayaml/limayaml_test.go
index 20e2c774..d6e01d4c 100644
--- a/pkg/limayaml/limayaml_test.go
+++ b/pkg/limayaml/limayaml_test.go
@@ -8,7 +8,7 @@ import (
 	"gotest.tools/v3/assert"
 )
 
-func dumpJSON(t *testing.T, d any) string {
+func dumpJSON(t *testing.T, d interface{}) string {
 	b, err := json.Marshal(d)
 	assert.NilError(t, err)
 	return string(b)
diff --git a/pkg/limayaml/validate_test.go b/pkg/limayaml/validate_test.go
index 51254757..4895531e 100644
--- a/pkg/limayaml/validate_test.go
+++ b/pkg/limayaml/validate_test.go
@@ -48,6 +48,31 @@ func TestValidateProbes(t *testing.T) {
 	assert.Error(t, err, "field `probe[0].script` must start with a '#!' line")
 }
 
+func TestValidateAdditionalDisks(t *testing.T) {
+	images := `images: [{"location": "/"}]`
+
+	validDisks := `
+additionalDisks:
+  - name: "disk1"
+  - name: "disk2"
+`
+	y, err := Load([]byte(validDisks+"\n"+images), "lima.yaml")
+	assert.NilError(t, err)
+
+	err = Validate(y, false)
+	assert.NilError(t, err)
+
+	invalidDisks := `
+additionalDisks:
+  - name: ""
+`
+	y, err = Load([]byte(invalidDisks+"\n"+images), "lima.yaml")
+	assert.NilError(t, err)
+
+	err = Validate(y, false)
+	assert.Error(t, err, "field `additionalDisks[0].name is invalid`: identifier must not be empty: invalid argument")
+}
+
 func TestValidateParamName(t *testing.T) {
 	images := `images: [{"location": "/"}]`
 	validProvision := `provision: [{"script": "echo $PARAM_name $PARAM_NAME $PARAM_Name_123"}]`