Repository navigation
Commit 0987b16
committed
fix(build): a subos declaring a payload that is gone cannot be honoured
The stale value was not a fossil after all -- it was the subos's own
`subos_info`, saying `glibc@2.39` on a machine whose only payload is 2.44. The
subos description is written once; the payloads beneath it are replaced
independently. Same staleness, a layer up, and the previous commit only
guarded the layer below.
Two things kept it alive:
1. The declaration was returned unchecked. Honouring it is not the
conservative choice -- the exact-match probe finds nothing, no loader
reaches the link line, and the artifact lands on the HOST loader, outside
the sandbox entirely. Worse than any substitution.
2. The second resolution pass was gated on `runtimeBinding.empty()`. A stale
declaration is not empty, so the pass that has the compiler in hand --
the only one that can check whether the payload exists -- never ran.
The gate is now `!tc->payloadPaths`, which is what both failures
(undiscoverable binding, uninstallable binding) actually look like.
Reproduced locally by injecting `runtime: glibc@2.99` into this machine's
subos: the declaration is passed over, resolution carries on to the 2.39 that
is installed, and the artifact takes the payload loader and runs.
66 unit tests; e2e 201/86/200/103/155.1 parent d99d1e3 commit 0987b16
1 file changed
Lines changed: 35 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
929 | 929 | | |
930 | 930 | | |
931 | 931 | | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
932 | 954 | | |
933 | 955 | | |
934 | 956 | | |
935 | 957 | | |
936 | | - | |
| 958 | + | |
937 | 959 | | |
938 | 960 | | |
939 | | - | |
| 961 | + | |
940 | 962 | | |
941 | 963 | | |
942 | 964 | | |
| |||
1705 | 1727 | | |
1706 | 1728 | | |
1707 | 1729 | | |
1708 | | - | |
1709 | | - | |
1710 | | - | |
1711 | | - | |
| 1730 | + | |
| 1731 | + | |
| 1732 | + | |
| 1733 | + | |
| 1734 | + | |
| 1735 | + | |
| 1736 | + | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
1712 | 1740 | | |
1713 | | - | |
| 1741 | + | |
1714 | 1742 | | |
1715 | 1743 | | |
1716 | 1744 | | |
| |||
0 commit comments