Skip to content

libcontainer: relax validation for absolute paths#3004

Merged
cyphar merged 2 commits intoopencontainers:masterfrom
thaJeztah:relax_validation
Jun 10, 2021
Merged

libcontainer: relax validation for absolute paths#3004
cyphar merged 2 commits intoopencontainers:masterfrom
thaJeztah:relax_validation

Conversation

@thaJeztah
Copy link
Copy Markdown
Member

Commits 1f1e91b and 2192670 (#2917) added validation for mountpoints to be an absolute path, to match the OCI specs.

Unfortunately, the old behavior (accepting the path to be a relative path) has been around for a long time, and although "not according to the spec", various higher level runtimes rely on this behavior.

While higher level runtime have been updated to address this requirement, there will be a transition period before all runtimes are updated to carry these fixes.

This patch relaxes the validation, to generate a WARNING instead of failing, allowing runtimes to update (but allowing them to update runc to the current version, which includes security fixes).

We can remove this exception in a future patch release.

relates to #2928, containerd/containerd#5547

@thaJeztah
Copy link
Copy Markdown
Member Author

@kolyshkin @AkihiroSuda PTAL. Let me know if this is acceptable for v1.0.0 (we can remove it in a patch release after that)

@AkihiroSuda
Copy link
Copy Markdown
Member

AFAIK, only Docker Swarm-mode was known to have depended on the old behavior, and that was fixed in Docker 20.10.7: moby/moby@afbb127

Is there any other project that depends on the old behavior?

@thaJeztah
Copy link
Copy Markdown
Member Author

thaJeztah commented Jun 7, 2021

BuildKit also needed changes, and (I think) for the swarmkit case at least, it's possible that existing services will break after updating (as they would have to be recreated for the new paths to be set); I'm wondering if there would be other situations where this could happen.

@AkihiroSuda
Copy link
Copy Markdown
Member

BuildKit also needed changes,

Do we have an issue ticket?
BuildKit CI does not seem hitting the issue (for the master branch, at least) moby/buildkit#2143

@thaJeztah
Copy link
Copy Markdown
Member Author

A fix was merged on master moby/buildkit#2123, and back ported to the v0.8 branch (but no tagged release exists with that fix)

// Relax validation for backward compatibility
oldDest := m.Destination
var err error
m.Destination, err = filepath.Abs(m.Destination)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can probably simplify this to filepath.Join("/", ...) (like on BuildKit); let me do so

@dims
Copy link
Copy Markdown
Contributor

dims commented Jun 8, 2021

I like this approach. thanks @thaJeztah

// Relax validation for backward compatibility
// TODO (runc 1.2.0): replace a warning below with
// return nil, fmt.Errorf("mount destination %s not absolute", m.Destination)
logrus.Warnf("mount destination %s not absolute (this won't be supported past runc 1.2.0)", m.Destination)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are still not sure how our post-v1 version scheme will look like.
So "late 2021" might be better than "1.2.0"?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Think we should make it more "generic"?

Suggested change
logrus.Warnf("mount destination %s not absolute (this won't be supported past runc 1.2.0)", m.Destination)
logrus.Warnf("mount destination %s not absolute (this will no longer be supported in a future release)", m.Destination)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the description and TODO

@AkihiroSuda AkihiroSuda added this to the 1.0.0 milestone Jun 8, 2021
Copy link
Copy Markdown
Member

@cyphar cyphar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to disable (t.Skip is fine, with a link to this PR or the linked issue) the TestValidateMounts test.

thaJeztah added 2 commits June 9, 2021 13:15
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Commits 1f1e91b and 2192670
added validation for mountpoints to be an absolute path, to match the OCI
specs.

Unfortunately, the old behavior (accepting the path to be a relative path)
has been around for a long time, and although "not according to the spec",
various higher level runtimes rely on this behavior.

While higher level runtime have been updated to address this requirement,
there will be a transition period before all runtimes are updated to carry
these fixes.

This patch relaxes the validation, to generate a WARNING instead of failing,
allowing runtimes to update (but allowing them to update runc to the current
version, which includes security fixes).

We can remove this exception in a future patch release.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
@thaJeztah
Copy link
Copy Markdown
Member Author

You need to disable (t.Skip is fine, with a link to this PR or the linked issue) the TestValidateMounts test.

Arf. My mistake; fixed!

Copy link
Copy Markdown
Contributor

@kolyshkin kolyshkin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Copy Markdown
Member

@cyphar cyphar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@cyphar cyphar closed this in f454bb1 Jun 10, 2021
@cyphar cyphar merged commit f454bb1 into opencontainers:master Jun 10, 2021
@thaJeztah thaJeztah deleted the relax_validation branch June 10, 2021 15:27
@thaJeztah
Copy link
Copy Markdown
Member Author

Thanks! I opened #3020 to track removal of this.

Maks1mS pushed a commit to stplr-dev/stplr that referenced this pull request Mar 14, 2026
This PR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [github.com/opencontainers/runc](https://github.com/opencontainers/runc) | require | patch | `v1.4.0` → `v1.4.1` | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/opencontainers/runc/badge)](https://securityscorecards.dev/viewer/?uri=github.com/opencontainers/runc) |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/23) for more information.

---

### Release Notes

<details>
<summary>opencontainers/runc (github.com/opencontainers/runc)</summary>

### [`v1.4.1`](https://github.com/opencontainers/runc/blob/HEAD/CHANGELOG.md#100---2021-06-22)

[Compare Source](opencontainers/runc@v1.4.0...v1.4.1)

> A wizard is never late, nor is he early, he arrives precisely when he means
> to.

As runc follows Semantic Versioning, we will endeavour to not make any
breaking changes without bumping the major version number of runc.
However, it should be noted that Go API usage of runc's internal
implementation (libcontainer) is *not* covered by this policy.

##### Removed

- Removed libcontainer/configs.Device\* identifiers (deprecated since rc94,
  use libcontainer/devices). ([#&#8203;2999](opencontainers/runc#2999))
- Removed libcontainer/system.RunningInUserNS function (deprecated since
  rc94, use libcontainer/userns). ([#&#8203;2999](opencontainers/runc#2999))

##### Deprecated

- The usage of relative paths for mountpoints will now produce a warning
  (such configurations are outside of the spec, and in future runc will
  produce an error when given such configurations). ([#&#8203;2917](opencontainers/runc#2917), [#&#8203;3004](opencontainers/runc#3004))

##### Fixed

- cgroupv2: devices: rework the filter generation to produce consistent
  results with cgroupv1, and always clobber any existing eBPF
  program(s) to fix `runc update` and avoid leaking eBPF programs
  (resulting in errors when managing containers).  ([#&#8203;2951](opencontainers/runc#2951))
- cgroupv2: correctly convert "number of IOs" statistics in a
  cgroupv1-compatible way. ([#&#8203;2965](opencontainers/runc#2965), [#&#8203;2967](opencontainers/runc#2967), [#&#8203;2968](opencontainers/runc#2968), [#&#8203;2964](opencontainers/runc#2964))
- cgroupv2: support larger than 32-bit IO statistics on 32-bit architectures.
- cgroupv2: wait for freeze to finish before returning from the freezing
  code, optimize the method for checking whether a cgroup is frozen. ([#&#8203;2955](opencontainers/runc#2955))
- cgroups/systemd: fixed "retry on dbus disconnect" logic introduced in rc94
- cgroups/systemd: fixed returning "unit already exists" error from a systemd
  cgroup manager (regression in rc94). ([#&#8203;2997](opencontainers/runc#2997), [#&#8203;2996](opencontainers/runc#2996))

##### Added

- cgroupv2: support SkipDevices with systemd driver. ([#&#8203;2958](opencontainers/runc#2958), [#&#8203;3019](opencontainers/runc#3019))
- cgroup1: blkio: support BFQ weights. ([#&#8203;3010](opencontainers/runc#3010))
- cgroupv2: set per-device io weights if BFQ IO scheduler is available.
  ([#&#8203;3022](opencontainers/runc#3022))

##### Changed

- cgroup/systemd: return, not ignore, stop unit error from Destroy. ([#&#8203;2946](opencontainers/runc#2946))
- Fix all golangci-lint failures. ([#&#8203;2781](opencontainers/runc#2781), [#&#8203;2962](opencontainers/runc#2962))
- Make `runc --version` output sane even when built with `go get` or
  otherwise outside of our build scripts. ([#&#8203;2962](opencontainers/runc#2962))
- cgroups: set SkipDevices during runc update (so we don't modify
  cgroups at all during `runc update`). ([#&#8203;2994](opencontainers/runc#2994))

<!-- minor releases -->

[Unreleased]: opencontainers/runc@v1.3.0-rc.1...HEAD

[1.3.0]: opencontainers/runc@v1.3.0-rc.2...v1.3.0

[1.2.0]: opencontainers/runc@v1.2.0-rc.1...v1.2.0

[1.1.0]: opencontainers/runc@v1.1.0-rc.1...v1.1.0

[1.0.0]: https://github.com/opencontainers/runc/releases/tag/v1.0.0

<!-- 1.0.z patch releases -->

[Unreleased 1.0.z]: opencontainers/runc@v1.0.3...release-1.0

[1.0.3]: opencontainers/runc@v1.0.2...v1.0.3

[1.0.2]: opencontainers/runc@v1.0.1...v1.0.2

[1.0.1]: opencontainers/runc@v1.0.0...v1.0.1

<!-- 1.1.z patch releases -->

[Unreleased 1.1.z]: opencontainers/runc@v1.1.15...release-1.1

[1.1.15]: opencontainers/runc@v1.1.14...v1.1.15

[1.1.14]: opencontainers/runc@v1.1.13...v1.1.14

[1.1.13]: opencontainers/runc@v1.1.12...v1.1.13

[1.1.12]: opencontainers/runc@v1.1.11...v1.1.12

[1.1.11]: opencontainers/runc@v1.1.10...v1.1.11

[1.1.10]: opencontainers/runc@v1.1.9...v1.1.10

[1.1.9]: opencontainers/runc@v1.1.8...v1.1.9

[1.1.8]: opencontainers/runc@v1.1.7...v1.1.8

[1.1.7]: opencontainers/runc@v1.1.6...v1.1.7

[1.1.6]: opencontainers/runc@v1.1.5...v1.1.6

[1.1.5]: opencontainers/runc@v1.1.4...v1.1.5

[1.1.4]: opencontainers/runc@v1.1.3...v1.1.4

[1.1.3]: opencontainers/runc@v1.1.2...v1.1.3

[1.1.2]: opencontainers/runc@v1.1.1...v1.1.2

[1.1.1]: opencontainers/runc@v1.1.0...v1.1.1

[1.1.0-rc.1]: opencontainers/runc@v1.0.0...v1.1.0-rc.1

<!-- 1.2.z patch releases -->

[Unreleased 1.2.z]: opencontainers/runc@v1.2.9...release-1.2

[1.2.9]: opencontainers/runc@v1.2.8...v1.2.9

[1.2.8]: opencontainers/runc@v1.2.7...v1.2.8

[1.2.7]: opencontainers/runc@v1.2.6...v1.2.7

[1.2.6]: opencontainers/runc@v1.2.5...v1.2.6

[1.2.5]: opencontainers/runc@v1.2.4...v1.2.5

[1.2.4]: opencontainers/runc@v1.2.3...v1.2.4

[1.2.3]: opencontainers/runc@v1.2.2...v1.2.3

[1.2.2]: opencontainers/runc@v1.2.1...v1.2.2

[1.2.1]: opencontainers/runc@v1.2.0...v1.2.1

[1.2.0-rc.3]: opencontainers/runc@v1.2.0-rc.2...v1.2.0-rc.3

[1.2.0-rc.2]: opencontainers/runc@v1.2.0-rc.1...v1.2.0-rc.2

[1.2.0-rc.1]: opencontainers/runc@v1.1.0...v1.2.0-rc.1

<!-- 1.3.z patch releases -->

[Unreleased 1.3.z]: opencontainers/runc@v1.3.4...release-1.3

[1.3.4]: opencontainers/runc@v1.3.3...v1.3.4

[1.3.3]: opencontainers/runc@v1.3.2...v1.3.3

[1.3.2]: opencontainers/runc@v1.3.1...v1.3.2

[1.3.1]: opencontainers/runc@v1.3.0...v1.3.1

[1.3.0]: opencontainers/runc@v1.3.0-rc.2...v1.3.0

[1.3.0-rc.2]: opencontainers/runc@v1.3.0-rc.1...v1.3.0-rc.2

[1.3.0-rc.1]: opencontainers/runc@v1.2.0...v1.3.0-rc.1

<!-- 1.4.z patch releases -->

[Unreleased 1.4.z]: opencontainers/runc@v1.4.1...release-1.4

[1.4.1]: opencontainers/runc@v1.4.0...v1.4.1

[1.4.0]: opencontainers/runc@v1.4.0-rc.3...v1.4.0

[1.4.0-rc.3]: opencontainers/runc@v1.4.0-rc.2...v1.4.0-rc.3

[1.4.0-rc.2]: opencontainers/runc@v1.4.0-rc.1...v1.4.0-rc.2

[1.4.0-rc.1]: opencontainers/runc@v1.3.0...v1.4.0-rc.1

<!-- 1.5.z patch releases -->

[Unreleased 1.5.z]: opencontainers/runc@v1.5.0-rc.1...release-1.5

[1.5.0-rc.1]: opencontainers/runc@v1.4.0...v1.5.0-rc.1

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At 12:00 AM through 04:59 AM and 10:00 PM through 11:59 PM, Monday through Friday ( * 0-4,22-23 * * 1-5 ), Only on Sunday and Saturday ( * * * * 0,6 ) (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OS40IiwidXBkYXRlZEluVmVyIjoiNDMuNTkuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiS2luZC9EZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://altlinux.space/stapler/stplr/pulls/361
Co-authored-by: Renovate Bot <stapler-helper-bot@noreply.altlinux.space>
Co-committed-by: Renovate Bot <stapler-helper-bot@noreply.altlinux.space>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants