Skip to content

Commit 0efe1f6

Browse files
committed
Merge branch '3.0-dev' into 3.0
Merge branch '3.0-dev' commit d633a6b Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
2 parents f6288d9 + d633a6b commit 0efe1f6

File tree

137 files changed

+9597
-4607
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+9597
-4607
lines changed

LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LICENSES-AND-NOTICES/SPECS/data/licenses.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
"byacc",
104104
"ca-certificates",
105105
"cachefilesd",
106+
"caddy",
106107
"cairomm",
107108
"calamares",
108109
"capnproto",
@@ -2359,6 +2360,7 @@
23592360
"GSL",
23602361
"gstreamer1",
23612362
"gtk-update-icon-cache",
2363+
"helm",
23622364
"intel-pf-bb-config",
23632365
"ivykis",
23642366
"jsonbuilder",

README.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,22 @@
44

55
Edge Microvisor Toolkit is a reference Linux operating system that demonstrates the full
66
capabilities of Intel® platforms for Edge AI workloads. Built on Azure Linux, it features an
7-
Intel®-maintained Linux Kernel, incorporating all the latest patches that have not yet been
7+
[Intel®-maintained Linux Kernel](./docs/developer-guide/emt-architecture-overview.md#next-kernel),
8+
incorporating all the latest patches that have not yet been
89
upstreamed. These patches optimize performance and enhance other capabilities for Intel®
910
silicon, streamlining integration for operating system vendors and technology partners.
1011

11-
Edge Microvisor Toolkit is published in several versions, both immutable and mutable.
12+
Edge Microvisor Toolkit is [published in several versions](./docs/developer-guide/get-started/emt-versions.md),
13+
both immutable and mutable.
1214
It may be used to quickly deploy, validate, and benchmark edge AI workloads, including those
1315
requiring real-time processing. You can also use the toolkit's flexible build infrastructure
1416
to create custom images from a large set of pre-provisioned packages.
1517

16-
Here are the published versions:
17-
18-
* [Edge Microvisor Toolkit Standalone Node (immutable)](https://github.com/open-edge-platform/edge-microvisor-toolkit-standalone-node)
19-
* [Edge Microvisor Toolkit Developer Node with or without real-time extensions (mutable)](./docs/developer-guide/emt-architecture-overview.md#developer-node-mutable-iso-image)
20-
* [Edge Microvisor Toolkit (mutuable or immutable) for use with Edge Manageability Framework](./docs/developer-guide/emt-deployment-edge-orchestrator.md)
21-
* [Edge Microvisor Bootkit](./docs/developer-guide/emt-bootkit.md)
22-
2318
Edge Microvisor Toolkit has undergone extensive validation across the Intel® Xeon®,
2419
Intel® Core Ultra™, Intel Core™, and Intel® Atom® processor families. It provides robust
2520
support for integrated NPU as well as a
2621
[selection of discrete GPU cards](./docs/developer-guide/emt-system-requirements.md#hardware-requirements).
2722

28-
2923
You can either build Edge Microvisor Toolkit by following step-by-step instructions or
3024
download it directly. Both the build system and Edge Microvisor Toolkit are available as open
3125
source.
@@ -44,14 +38,18 @@ If you're interested in most up-to-date versions, check out the
4438
and
4539
[CVE](https://github.com/open-edge-platform/edge-microvisor-toolkit/discussions?discussions_q=is%3Aopen+cve+) releases.
4640

47-
4841
**Demos on YouTube**
4942

5043
* [Standalone Edge Microvisor Toolkit (EMT-S) integration with Edge Microvisor Bootkit](https://www.youtube.com/watch?v=rmgmWYi6OpE):
5144
USB Device Preparation, Provisioning Process, System Readiness, and Final Boot with the cluster starting successfully.
5245
* [Edge Microvisor Toolkit Standalone Node 3.0](https://www.youtube.com/watch?v=j_4EX_wggSI):
5346
a brief walkthrough of Edge Microvisor Toolkit Standalone Node for the 3.0 release, covering various use cases.
5447

48+
You can also try out the
49+
[OS Image Composer](http://github.com/open-edge-platform/os-image-composer) -
50+
a *new* project in the Open Edge platform family that allows you to compose
51+
custom OS images from popular distributions using pre-built artifacts.
52+
5553
## Get Help or Contribute
5654

5755
If you want to participate in the GitHub community for Edge Microvisor Toolkit, you can
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
From ffc4888694c5222e9eddecb461c955d5661aa18c Mon Sep 17 00:00:00 2001
2+
From: Carl George <carl@george.computer>
3+
Date: Wed, 16 Feb 2022 11:45:03 -0600
4+
Subject: [PATCH 1/2] Disable commands that can alter the binary
5+
6+
---
7+
cmd/commands.go | 45 ---------------------------------------------
8+
1 file changed, 45 deletions(-)
9+
10+
diff --git a/cmd/commands.go b/cmd/commands.go
11+
index 259dd358..31b85a18 100644
12+
--- a/cmd/commands.go
13+
+++ b/cmd/commands.go
14+
@@ -395,51 +395,6 @@ is always printed to stdout.
15+
},
16+
})
17+
18+
- RegisterCommand(Command{
19+
- Name: "upgrade",
20+
- Short: "Upgrade Caddy (EXPERIMENTAL)",
21+
- Long: `
22+
-Downloads an updated Caddy binary with the same modules/plugins at the
23+
-latest versions. EXPERIMENTAL: May be changed or removed.
24+
-`,
25+
- CobraFunc: func(cmd *cobra.Command) {
26+
- cmd.Flags().BoolP("keep-backup", "k", false, "Keep the backed up binary, instead of deleting it")
27+
- cmd.RunE = WrapCommandFuncForCobra(cmdUpgrade)
28+
- },
29+
- })
30+
-
31+
- RegisterCommand(Command{
32+
- Name: "add-package",
33+
- Usage: "<package[@version]...>",
34+
- Short: "Adds Caddy packages (EXPERIMENTAL)",
35+
- Long: `
36+
-Downloads an updated Caddy binary with the specified packages (module/plugin)
37+
-added, with an optional version specified (e.g., "package@version"). Retains
38+
-existing packages. Returns an error if any of the specified packages are already
39+
-included. EXPERIMENTAL: May be changed or removed.
40+
-`,
41+
- CobraFunc: func(cmd *cobra.Command) {
42+
- cmd.Flags().BoolP("keep-backup", "k", false, "Keep the backed up binary, instead of deleting it")
43+
- cmd.RunE = WrapCommandFuncForCobra(cmdAddPackage)
44+
- },
45+
- })
46+
-
47+
- RegisterCommand(Command{
48+
- Name: "remove-package",
49+
- Func: cmdRemovePackage,
50+
- Usage: "<packages...>",
51+
- Short: "Removes Caddy packages (EXPERIMENTAL)",
52+
- Long: `
53+
-Downloads an updated Caddy binaries without the specified packages (module/plugin).
54+
-Returns an error if any of the packages are not included.
55+
-EXPERIMENTAL: May be changed or removed.
56+
-`,
57+
- CobraFunc: func(cmd *cobra.Command) {
58+
- cmd.Flags().BoolP("keep-backup", "k", false, "Keep the backed up binary, instead of deleting it")
59+
- cmd.RunE = WrapCommandFuncForCobra(cmdRemovePackage)
60+
- },
61+
- })
62+
-
63+
defaultFactory.Use(func(rootCmd *cobra.Command) {
64+
rootCmd.AddCommand(caddyCmdToCobra(Command{
65+
Name: "manpage",
66+
--
67+
2.47.1
68+

SPECS/caddy/CVE-2024-45339.patch

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
From afd4339ec8682b92eb6bcc870d138106ffd5f58d Mon Sep 17 00:00:00 2001
2+
From: kavyasree <kkaitepalli@microsoft.com>
3+
Date: Fri, 31 Jan 2025 21:16:51 +0530
4+
Subject: [PATCH] Patch CVE-2024-45339
5+
6+
Reference: https://github.com/golang/glog/pull/74
7+
8+
---
9+
vendor/github.com/golang/glog/glog_file.go | 60 ++++++++++++++++------
10+
1 file changed, 44 insertions(+), 16 deletions(-)
11+
12+
diff --git a/vendor/github.com/golang/glog/glog_file.go b/vendor/github.com/golang/glog/glog_file.go
13+
index e7d125c..6d239fa 100644
14+
--- a/vendor/github.com/golang/glog/glog_file.go
15+
+++ b/vendor/github.com/golang/glog/glog_file.go
16+
@@ -118,32 +118,53 @@ var onceLogDirs sync.Once
17+
// contains tag ("INFO", "FATAL", etc.) and t. If the file is created
18+
// successfully, create also attempts to update the symlink for that tag, ignoring
19+
// errors.
20+
-func create(tag string, t time.Time) (f *os.File, filename string, err error) {
21+
+func create(tag string, t time.Time, dir string) (f *os.File, filename string, err error) {
22+
+ if dir != "" {
23+
+ f, name, err := createInDir(dir, tag, t)
24+
+ if err == nil {
25+
+ return f, name, err
26+
+ }
27+
+ return nil, "", fmt.Errorf("log: cannot create log: %v", err)
28+
+ }
29+
+
30+
onceLogDirs.Do(createLogDirs)
31+
if len(logDirs) == 0 {
32+
return nil, "", errors.New("log: no log dirs")
33+
}
34+
- name, link := logName(tag, t)
35+
var lastErr error
36+
for _, dir := range logDirs {
37+
- fname := filepath.Join(dir, name)
38+
- f, err := os.Create(fname)
39+
+ f, name, err := createInDir(dir, tag, t)
40+
if err == nil {
41+
- symlink := filepath.Join(dir, link)
42+
- os.Remove(symlink) // ignore err
43+
- os.Symlink(name, symlink) // ignore err
44+
- if *logLink != "" {
45+
- lsymlink := filepath.Join(*logLink, link)
46+
- os.Remove(lsymlink) // ignore err
47+
- os.Symlink(fname, lsymlink) // ignore err
48+
- }
49+
- return f, fname, nil
50+
+ return f, name, err
51+
}
52+
lastErr = err
53+
}
54+
return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr)
55+
}
56+
57+
+func createInDir(dir, tag string, t time.Time) (f *os.File, name string, err error) {
58+
+ name, link := logName(tag, t)
59+
+ fname := filepath.Join(dir, name)
60+
+ // O_EXCL is important here, as it prevents a vulnerability. The general idea is that logs often
61+
+ // live in an insecure directory (like /tmp), so an unprivileged attacker could create fname in
62+
+ // advance as a symlink to a file the logging process can access, but the attacker cannot. O_EXCL
63+
+ // fails the open if it already exists, thus prevent our this code from opening the existing file
64+
+ // the attacker points us to.
65+
+ f, err = os.OpenFile(fname, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
66+
+ if err == nil {
67+
+ symlink := filepath.Join(dir, link)
68+
+ os.Remove(symlink) // ignore err
69+
+ os.Symlink(name, symlink) // ignore err
70+
+ if *logLink != "" {
71+
+ lsymlink := filepath.Join(*logLink, link)
72+
+ os.Remove(lsymlink) // ignore err
73+
+ os.Symlink(fname, lsymlink) // ignore err
74+
+ }
75+
+ return f, fname, nil
76+
+ }
77+
+ return nil, "", err
78+
+}
79+
+
80+
// flushSyncWriter is the interface satisfied by logging destinations.
81+
type flushSyncWriter interface {
82+
Flush() error
83+
@@ -247,6 +268,7 @@ type syncBuffer struct {
84+
names []string
85+
sev logsink.Severity
86+
nbytes uint64 // The number of bytes written to this file
87+
+ madeAt time.Time
88+
}
89+
90+
func (sb *syncBuffer) Sync() error {
91+
@@ -254,9 +276,14 @@ func (sb *syncBuffer) Sync() error {
92+
}
93+
94+
func (sb *syncBuffer) Write(p []byte) (n int, err error) {
95+
+ // Rotate the file if it is too large, but ensure we only do so,
96+
+ // if rotate doesn't create a conflicting filename.
97+
if sb.nbytes+uint64(len(p)) >= MaxSize {
98+
- if err := sb.rotateFile(time.Now()); err != nil {
99+
- return 0, err
100+
+ now := timeNow()
101+
+ if now.After(sb.madeAt.Add(1*time.Second)) || now.Second() != sb.madeAt.Second() {
102+
+ if err := sb.rotateFile(now); err != nil {
103+
+ return 0, err
104+
+ }
105+
}
106+
}
107+
n, err = sb.Writer.Write(p)
108+
@@ -274,7 +301,8 @@ const footer = "\nCONTINUED IN NEXT FILE\n"
109+
func (sb *syncBuffer) rotateFile(now time.Time) error {
110+
var err error
111+
pn := "<none>"
112+
- file, name, err := create(sb.sev.String(), now)
113+
+ file, name, err := create(sb.sev.String(), now, "")
114+
+ sb.madeAt = now
115+
116+
if sb.file != nil {
117+
// The current log file becomes the previous log at the end of
118+
--
119+
2.34.1
120+

SPECS/caddy/CVE-2025-22869.patch

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
From 041b89a18f81265899e42e6801f830c101a96120 Mon Sep 17 00:00:00 2001
2+
From: Kanishk-Bansal <kbkanishk975@gmail.com>
3+
Date: Sun, 2 Mar 2025 13:46:00 +0000
4+
Subject: [PATCH] CVE-2025-22869
5+
6+
Upstream Reference : https://github.com/golang/crypto/commit/7292932d45d55c7199324ab0027cc86e8198aa22
7+
8+
ssh: limit the size of the internal packet queue while waiting for KEX
9+
10+
In the SSH protocol, clients and servers execute the key exchange to
11+
generate one-time session keys used for encryption and authentication.
12+
The key exchange is performed initially after the connection is
13+
established and then periodically after a configurable amount of data.
14+
While a key exchange is in progress, we add the received packets to an
15+
internal queue until we receive SSH_MSG_KEXINIT from the other side.
16+
This can result in high memory usage if the other party is slow to
17+
respond to the SSH_MSG_KEXINIT packet, or memory exhaustion if a
18+
malicious client never responds to an SSH_MSG_KEXINIT packet during a
19+
large file transfer.
20+
We now limit the internal queue to 64 packets: this means 2MB with the
21+
typical 32KB packet size.
22+
When the internal queue is full we block further writes until the
23+
pending key exchange is completed or there is a read or write error.
24+
25+
Thanks to Yuichi Watanabe for reporting this issue.
26+
27+
Change-Id: I1ce2214cc16e08b838d4bc346c74c72addafaeec
28+
Reviewed-on: https://go-review.googlesource.com/c/crypto/+/652135
29+
Reviewed-by: Neal Patel <nealpatel@google.com>
30+
Auto-Submit: Gopher Robot <gobot@golang.org>
31+
Reviewed-by: Roland Shoemaker <roland@golang.org>
32+
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
33+
34+
---
35+
vendor/golang.org/x/crypto/ssh/handshake.go | 47 ++++++++++++++++-----
36+
1 file changed, 37 insertions(+), 10 deletions(-)
37+
38+
diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go
39+
index 70a7369..e14eb6c 100644
40+
--- a/vendor/golang.org/x/crypto/ssh/handshake.go
41+
+++ b/vendor/golang.org/x/crypto/ssh/handshake.go
42+
@@ -24,6 +24,11 @@ const debugHandshake = false
43+
// quickly.
44+
const chanSize = 16
45+
46+
+// maxPendingPackets sets the maximum number of packets to queue while waiting
47+
+// for KEX to complete. This limits the total pending data to maxPendingPackets
48+
+// * maxPacket bytes, which is ~16.8MB.
49+
+const maxPendingPackets = 64
50+
+
51+
// keyingTransport is a packet based transport that supports key
52+
// changes. It need not be thread-safe. It should pass through
53+
// msgNewKeys in both directions.
54+
@@ -58,11 +63,19 @@ type handshakeTransport struct {
55+
incoming chan []byte
56+
readError error
57+
58+
- mu sync.Mutex
59+
- writeError error
60+
- sentInitPacket []byte
61+
- sentInitMsg *kexInitMsg
62+
- pendingPackets [][]byte // Used when a key exchange is in progress.
63+
+ mu sync.Mutex
64+
+ // Condition for the above mutex. It is used to notify a completed key
65+
+ // exchange or a write failure. Writes can wait for this condition while a
66+
+ // key exchange is in progress.
67+
+ writeCond *sync.Cond
68+
+ writeError error
69+
+ sentInitPacket []byte
70+
+ sentInitMsg *kexInitMsg
71+
+ // Used to queue writes when a key exchange is in progress. The length is
72+
+ // limited by pendingPacketsSize. Once full, writes will block until the key
73+
+ // exchange is completed or an error occurs. If not empty, it is emptied
74+
+ // all at once when the key exchange is completed in kexLoop.
75+
+ pendingPackets [][]byte
76+
writePacketsLeft uint32
77+
writeBytesLeft int64
78+
79+
@@ -114,6 +127,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion,
80+
81+
config: config,
82+
}
83+
+ t.writeCond = sync.NewCond(&t.mu)
84+
t.resetReadThresholds()
85+
t.resetWriteThresholds()
86+
87+
@@ -236,6 +250,7 @@ func (t *handshakeTransport) recordWriteError(err error) {
88+
defer t.mu.Unlock()
89+
if t.writeError == nil && err != nil {
90+
t.writeError = err
91+
+ t.writeCond.Broadcast()
92+
}
93+
}
94+
95+
@@ -339,6 +354,8 @@ write:
96+
}
97+
}
98+
t.pendingPackets = t.pendingPackets[:0]
99+
+ // Unblock writePacket if waiting for KEX.
100+
+ t.writeCond.Broadcast()
101+
t.mu.Unlock()
102+
}
103+
104+
@@ -526,11 +543,20 @@ func (t *handshakeTransport) writePacket(p []byte) error {
105+
}
106+
107+
if t.sentInitMsg != nil {
108+
- // Copy the packet so the writer can reuse the buffer.
109+
- cp := make([]byte, len(p))
110+
- copy(cp, p)
111+
- t.pendingPackets = append(t.pendingPackets, cp)
112+
- return nil
113+
+ if len(t.pendingPackets) < maxPendingPackets {
114+
+ // Copy the packet so the writer can reuse the buffer.
115+
+ cp := make([]byte, len(p))
116+
+ copy(cp, p)
117+
+ t.pendingPackets = append(t.pendingPackets, cp)
118+
+ return nil
119+
+ }
120+
+ for t.sentInitMsg != nil {
121+
+ // Block and wait for KEX to complete or an error.
122+
+ t.writeCond.Wait()
123+
+ if t.writeError != nil {
124+
+ return t.writeError
125+
+ }
126+
+ }
127+
}
128+
129+
if t.writeBytesLeft > 0 {
130+
@@ -547,6 +573,7 @@ func (t *handshakeTransport) writePacket(p []byte) error {
131+
132+
if err := t.pushPacket(p); err != nil {
133+
t.writeError = err
134+
+ t.writeCond.Broadcast()
135+
}
136+
137+
return nil
138+
--
139+
2.45.2

0 commit comments

Comments
 (0)