Skip to content

Conversation

@nga888
Copy link
Collaborator

@nga888 nga888 commented Oct 27, 2025

Fix manifest trustInfo to use the urn:schemas-microsoft-com:asm.v3 namespace.

Fixes #120394.

Fix manifest `trustInfo` to use the `urn:schemas-microsoft-com:asm.v3`
namespace.

Fixes llvm#120394.
@llvmbot
Copy link
Member

llvmbot commented Oct 27, 2025

@llvm/pr-subscribers-platform-windows

@llvm/pr-subscribers-lld-coff

Author: Andrew Ng (nga888)

Changes

Fix manifest trustInfo to use the urn:schemas-microsoft-com:asm.v3 namespace.

Fixes #120394.


Full diff: https://github.com/llvm/llvm-project/pull/165285.diff

5 Files Affected:

  • (modified) lld/COFF/DriverUtils.cpp (+1-1)
  • (added) lld/test/COFF/Inputs/manifest-uac.test (+11)
  • (added) lld/test/COFF/manifest-uac.test (+33)
  • (modified) lld/test/COFF/manifest.test (+34-31)
  • (modified) lld/test/COFF/manifestinput.test (+17-18)
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp
index 96ae2f0ddef6f..10a3934d53284 100644
--- a/lld/COFF/DriverUtils.cpp
+++ b/lld/COFF/DriverUtils.cpp
@@ -440,7 +440,7 @@ std::string LinkerDriver::createDefaultXml() {
      << "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\"\n"
      << "          manifestVersion=\"1.0\">\n";
   if (ctx.config.manifestUAC) {
-    os << "  <trustInfo>\n"
+    os << "  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n"
        << "    <security>\n"
        << "      <requestedPrivileges>\n"
        << "         <requestedExecutionLevel level=" << ctx.config.manifestLevel
diff --git a/lld/test/COFF/Inputs/manifest-uac.test b/lld/test/COFF/Inputs/manifest-uac.test
new file mode 100644
index 0000000000000..5269339489355
--- /dev/null
+++ b/lld/test/COFF/Inputs/manifest-uac.test
@@ -0,0 +1,11 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
+<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+    <security>
+      <requestedPrivileges>
+        <requestedExecutionLevel level='asInvoker'
+                                 uiAccess='false'/>
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+</assembly>
diff --git a/lld/test/COFF/manifest-uac.test b/lld/test/COFF/manifest-uac.test
new file mode 100644
index 0000000000000..d3a17c7282716
--- /dev/null
+++ b/lld/test/COFF/manifest-uac.test
@@ -0,0 +1,33 @@
+# REQUIRES: libxml2
+
+# RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
+# RUN: lld-link /out:%t.exe /entry:main \
+# RUN:   /manifest:embed \
+# RUN:   /manifestinput:%p/Inputs/manifest-uac.test %t.obj
+# RUN: llvm-readobj --coff-resources %t.exe | FileCheck %s
+
+CHECK:      Data (
+CHECK-NEXT:   0000: 3C3F786D 6C207665 7273696F 6E3D2231  |<?xml version="1|
+CHECK-NEXT:   0010: 2E302220 656E636F 64696E67 3D225554  |.0" encoding="UT|
+CHECK-NEXT:   0020: 462D3822 3F3E0A3C 61737365 6D626C79  |F-8"?>.<assembly|
+CHECK-NEXT:   0030: 20786D6C 6E733D22 75726E3A 73636865  | xmlns="urn:sche|
+CHECK-NEXT:   0040: 6D61732D 6D696372 6F736F66 742D636F  |mas-microsoft-co|
+CHECK-NEXT:   0050: 6D3A6173 6D2E7631 22206D61 6E696665  |m:asm.v1" manife|
+CHECK-NEXT:   0060: 73745665 7273696F 6E3D2231 2E30223E  |stVersion="1.0">|
+CHECK-NEXT:   0070: 0A20203C 74727573 74496E66 6F20786D  |.  <trustInfo xm|
+CHECK-NEXT:   0080: 6C6E733D 2275726E 3A736368 656D6173  |lns="urn:schemas|
+CHECK-NEXT:   0090: 2D6D6963 726F736F 66742D63 6F6D3A61  |-microsoft-com:a|
+CHECK-NEXT:   00A0: 736D2E76 33223E0A 20202020 3C736563  |sm.v3">.    <sec|
+CHECK-NEXT:   00B0: 75726974 793E0A20 20202020 203C7265  |urity>.      <re|
+CHECK-NEXT:   00C0: 71756573 74656450 72697669 6C656765  |questedPrivilege|
+CHECK-NEXT:   00D0: 733E0A20 20202020 2020203C 72657175  |s>.        <requ|
+CHECK-NEXT:   00E0: 65737465 64457865 63757469 6F6E4C65  |estedExecutionLe|
+CHECK-NEXT:   00F0: 76656C20 6C657665 6C3D2261 73496E76  |vel level="asInv|
+CHECK-NEXT:   0100: 6F6B6572 22207569 41636365 73733D22  |oker" uiAccess="|
+CHECK-NEXT:   0110: 66616C73 65222F3E 0A202020 2020203C  |false"/>.      <|
+CHECK-NEXT:   0120: 2F726571 75657374 65645072 6976696C  |/requestedPrivil|
+CHECK-NEXT:   0130: 65676573 3E0A2020 20203C2F 73656375  |eges>.    </secu|
+CHECK-NEXT:   0140: 72697479 3E0A2020 3C2F7472 75737449  |rity>.  </trustI|
+CHECK-NEXT:   0150: 6E666F3E 0A3C2F61 7373656D 626C793E  |nfo>.</assembly>|
+CHECK-NEXT:   0160: 0A                                   |.|
+CHECK-NEXT: )
diff --git a/lld/test/COFF/manifest.test b/lld/test/COFF/manifest.test
index 4910600bd3a17..09de96e9bccfa 100644
--- a/lld/test/COFF/manifest.test
+++ b/lld/test/COFF/manifest.test
@@ -10,7 +10,7 @@
 MANIFEST: <?xml version="1.0" standalone="yes"?>
 MANIFEST: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
 MANIFEST:           manifestVersion="1.0">
-MANIFEST:   <trustInfo>
+MANIFEST:   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 MANIFEST:     <security>
 MANIFEST:       <requestedPrivileges>
 MANIFEST:          <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
@@ -26,7 +26,7 @@ MANIFEST: </assembly>
 UAC: <?xml version="1.0" standalone="yes"?>
 UAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
 UAC:           manifestVersion="1.0">
-UAC:   <trustInfo>
+UAC:   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 UAC:     <security>
 UAC:       <requestedPrivileges>
 UAC:          <requestedExecutionLevel level='requireAdministrator' uiAccess='true'/>
@@ -43,7 +43,7 @@ UAC: </assembly>
 DEPENDENCY: <?xml version="1.0" standalone="yes"?>
 DEPENDENCY: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
 DEPENDENCY:           manifestVersion="1.0">
-DEPENDENCY:   <trustInfo>
+DEPENDENCY:   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 DEPENDENCY:     <security>
 DEPENDENCY:       <requestedPrivileges>
 DEPENDENCY:          <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
@@ -90,7 +90,7 @@ NOUACNODEP: </assembly>
 SEVERALDEPS: <?xml version="1.0" standalone="yes"?>
 SEVERALDEPS: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
 SEVERALDEPS:           manifestVersion="1.0">
-SEVERALDEPS:   <trustInfo>
+SEVERALDEPS:   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 SEVERALDEPS:     <security>
 SEVERALDEPS:       <requestedPrivileges>
 SEVERALDEPS:          <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
@@ -139,31 +139,34 @@ EMBED:   0040: 6D61732D 6D696372 6F736F66 742D636F  |mas-microsoft-co|
 EMBED:   0050: 6D3A6173 6D2E7631 220A2020 20202020  |m:asm.v1".      |
 EMBED:   0060: 20202020 6D616E69 66657374 56657273  |    manifestVers|
 EMBED:   0070: 696F6E3D 22312E30 223E0A20 203C7472  |ion="1.0">.  <tr|
-EMBED:   0080: 75737449 6E666F3E 0A202020 203C7365  |ustInfo>.    <se|
-EMBED:   0090: 63757269 74793E0A 20202020 20203C72  |curity>.      <r|
-EMBED:   00A0: 65717565 73746564 50726976 696C6567  |equestedPrivileg|
-EMBED:   00B0: 65733E0A 20202020 20202020 203C7265  |es>.         <re|
-EMBED:   00C0: 71756573 74656445 78656375 74696F6E  |questedExecution|
-EMBED:   00D0: 4C657665 6C206C65 76656C3D 27617349  |Level level='asI|
-EMBED:   00E0: 6E766F6B 65722720 75694163 63657373  |nvoker' uiAccess|
-EMBED:   00F0: 3D276661 6C736527 2F3E0A20 20202020  |='false'/>.     |
-EMBED:   0100: 203C2F72 65717565 73746564 50726976  | </requestedPriv|
-EMBED:   0110: 696C6567 65733E0A 20202020 3C2F7365  |ileges>.    </se|
-EMBED:   0120: 63757269 74793E0A 20203C2F 74727573  |curity>.  </trus|
-EMBED:   0130: 74496E66 6F3E0A20 203C6465 70656E64  |tInfo>.  <depend|
-EMBED:   0140: 656E6379 3E0A2020 20203C64 6570656E  |ency>.    <depen|
-EMBED:   0150: 64656E74 41737365 6D626C79 3E0A2020  |dentAssembly>.  |
-EMBED:   0160: 20202020 3C617373 656D626C 79496465  |    <assemblyIde|
-EMBED:   0170: 6E746974 7920666F 6F3D2762 61722720  |ntity foo='bar' |
-EMBED:   0180: 2F3E0A20 2020203C 2F646570 656E6465  |/>.    </depende|
-EMBED:   0190: 6E744173 73656D62 6C793E0A 20203C2F  |ntAssembly>.  </|
-EMBED:   01A0: 64657065 6E64656E 63793E0A 20203C64  |dependency>.  <d|
-EMBED:   01B0: 6570656E 64656E63 793E0A20 2020203C  |ependency>.    <|
-EMBED:   01C0: 64657065 6E64656E 74417373 656D626C  |dependentAssembl|
-EMBED:   01D0: 793E0A20 20202020 203C6173 73656D62  |y>.      <assemb|
-EMBED:   01E0: 6C794964 656E7469 74792062 617A3D27  |lyIdentity baz='|
-EMBED:   01F0: 71757578 27202F3E 0A202020 203C2F64  |quux' />.    </d|
-EMBED:   0200: 6570656E 64656E74 41737365 6D626C79  |ependentAssembly|
-EMBED:   0210: 3E0A2020 3C2F6465 70656E64 656E6379  |>.  </dependency|
-EMBED:   0220: 3E0A3C2F 61737365 6D626C79 3E0A      |>.</assembly>.|
+EMBED:   0080: 75737449 6E666F20 786D6C6E 733D2275  |ustInfo xmlns="u|
+EMBED:   0090: 726E3A73 6368656D 61732D6D 6963726F  |rn:schemas-micro|
+EMBED:   00A0: 736F6674 2D636F6D 3A61736D 2E763322  |soft-com:asm.v3"|
+EMBED:   00B0: 3E0A2020 20203C73 65637572 6974793E  |>.    <security>|
+EMBED:   00C0: 0A202020 2020203C 72657175 65737465  |.      <requeste|
+EMBED:   00D0: 64507269 76696C65 6765733E 0A202020  |dPrivileges>.   |
+EMBED:   00E0: 20202020 20203C72 65717565 73746564  |      <requested|
+EMBED:   00F0: 45786563 7574696F 6E4C6576 656C206C  |ExecutionLevel l|
+EMBED:   0100: 6576656C 3D276173 496E766F 6B657227  |evel='asInvoker'|
+EMBED:   0110: 20756941 63636573 733D2766 616C7365  | uiAccess='false|
+EMBED:   0120: 272F3E0A 20202020 20203C2F 72657175  |'/>.      </requ|
+EMBED:   0130: 65737465 64507269 76696C65 6765733E  |estedPrivileges>|
+EMBED:   0140: 0A202020 203C2F73 65637572 6974793E  |.    </security>|
+EMBED:   0150: 0A20203C 2F747275 7374496E 666F3E0A  |.  </trustInfo>.|
+EMBED:   0160: 20203C64 6570656E 64656E63 793E0A20  |  <dependency>. |
+EMBED:   0170: 2020203C 64657065 6E64656E 74417373  |   <dependentAss|
+EMBED:   0180: 656D626C 793E0A20 20202020 203C6173  |embly>.      <as|
+EMBED:   0190: 73656D62 6C794964 656E7469 74792066  |semblyIdentity f|
+EMBED:   01A0: 6F6F3D27 62617227 202F3E0A 20202020  |oo='bar' />.    |
+EMBED:   01B0: 3C2F6465 70656E64 656E7441 7373656D  |</dependentAssem|
+EMBED:   01C0: 626C793E 0A20203C 2F646570 656E6465  |bly>.  </depende|
+EMBED:   01D0: 6E63793E 0A20203C 64657065 6E64656E  |ncy>.  <dependen|
+EMBED:   01E0: 63793E0A 20202020 3C646570 656E6465  |cy>.    <depende|
+EMBED:   01F0: 6E744173 73656D62 6C793E0A 20202020  |ntAssembly>.    |
+EMBED:   0200: 20203C61 7373656D 626C7949 64656E74  |  <assemblyIdent|
+EMBED:   0210: 69747920 62617A3D 27717575 7827202F  |ity baz='quux' /|
+EMBED:   0220: 3E0A2020 20203C2F 64657065 6E64656E  |>.    </dependen|
+EMBED:   0230: 74417373 656D626C 793E0A20 203C2F64  |tAssembly>.  </d|
+EMBED:   0240: 6570656E 64656E63 793E0A3C 2F617373  |ependency>.</ass|
+EMBED:   0250: 656D626C 793E0A                      |embly>.|
 EMBED: )
diff --git a/lld/test/COFF/manifestinput.test b/lld/test/COFF/manifestinput.test
index 04af80a13312d..cbf27b1ea96b5 100644
--- a/lld/test/COFF/manifestinput.test
+++ b/lld/test/COFF/manifestinput.test
@@ -5,22 +5,21 @@
 # RUN:   /manifest:embed \
 # RUN:   /manifestuac:"level='requireAdministrator'" \
 # RUN:   /manifestinput:%p/Inputs/manifestinput.test %t.obj
-# RUN: llvm-readobj --coff-resources --file-headers %t.exe | FileCheck %s \
-# RUN:   -check-prefix TEST_EMBED
+# RUN: llvm-readobj --coff-resources --file-headers %t.exe | FileCheck %s
 
-TEST_EMBED:          ResourceTableRVA: 0x2000
-TEST_EMBED-NEXT:     ResourceTableSize: 0x2A0
-TEST_EMBED-DAG:      Resources [
-TEST_EMBED-NEXT:       Total Number of Resources: 1
-TEST_EMBED-DAG:        Number of String Entries: 0
-TEST_EMBED-NEXT:       Number of ID Entries: 1
-TEST_EMBED-NEXT:       Type: MANIFEST (ID 24) [
-TEST_EMBED-NEXT:         Table Offset: 0x18
-TEST_EMBED-NEXT:         Number of String Entries: 0
-TEST_EMBED-NEXT:         Number of ID Entries: 1
-TEST_EMBED-NEXT:         Name: (ID 1) [
-TEST_EMBED-NEXT:           Table Offset: 0x30
-TEST_EMBED-NEXT:           Number of String Entries: 0
-TEST_EMBED-NEXT:           Number of ID Entries: 1
-TEST_EMBED-NEXT:           Language: (ID 1033) [
-TEST_EMBED-NEXT:             Entry Offset: 0x48
+CHECK:          ResourceTableRVA: 0x2000
+CHECK-NEXT:     ResourceTableSize: 0x2C8
+CHECK-DAG:      Resources [
+CHECK-NEXT:       Total Number of Resources: 1
+CHECK-DAG:        Number of String Entries: 0
+CHECK-NEXT:       Number of ID Entries: 1
+CHECK-NEXT:       Type: MANIFEST (ID 24) [
+CHECK-NEXT:         Table Offset: 0x18
+CHECK-NEXT:         Number of String Entries: 0
+CHECK-NEXT:         Number of ID Entries: 1
+CHECK-NEXT:         Name: (ID 1) [
+CHECK-NEXT:           Table Offset: 0x30
+CHECK-NEXT:           Number of String Entries: 0
+CHECK-NEXT:           Number of ID Entries: 1
+CHECK-NEXT:           Language: (ID 1033) [
+CHECK-NEXT:             Entry Offset: 0x48

@nga888 nga888 merged commit 6ab8e8f into llvm:main Oct 29, 2025
14 checks passed
@nga888 nga888 deleted the fix-lld-link-trustinfo-manifest branch October 29, 2025 10:35
@nga888 nga888 added this to the LLVM 21.x Release milestone Oct 29, 2025
@github-project-automation github-project-automation bot moved this to Needs Triage in LLVM Release Status Oct 29, 2025
@nga888
Copy link
Collaborator Author

nga888 commented Oct 29, 2025

/cherry-pick 6ab8e8f

@llvmbot
Copy link
Member

llvmbot commented Oct 29, 2025

/pull-request #165605

@llvmbot llvmbot moved this from Needs Triage to Done in LLVM Release Status Oct 29, 2025
aokblast pushed a commit to aokblast/llvm-project that referenced this pull request Oct 30, 2025
Fix manifest `trustInfo` to use the `urn:schemas-microsoft-com:asm.v3`
namespace.

Fixes llvm#120394.
c-rhodes pushed a commit to llvmbot/llvm-project that referenced this pull request Oct 31, 2025
Fix manifest `trustInfo` to use the `urn:schemas-microsoft-com:asm.v3`
namespace.

Fixes llvm#120394.

(cherry picked from commit 6ab8e8f)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

[clang-cl] Generates bad manifest XML for Visual Studio UAC settings

3 participants