Skip to content

Commit 8b7ec4f

Browse files
uefi: Fix lifetimes in device_path TryFrom<&[u8]> impls
The missing lifetime means that the &[u8] buffer could be freed while the &DevicePath still exists, which is UB. (cherry picked from commit a9e48c2)
1 parent 4e4e190 commit 8b7ec4f

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

uefi/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
# uefi - [Unreleased]
22

33

4+
5+
# uefi - 0.30.0 (unreleased)
6+
## Changed
7+
- **Breaking:**: Fixed a bug in the impls of `TryFrom<&[u8]>` for
8+
`&DevicePathHeader`, `&DevicePathNode` and `&DevicePath` that could lead to
9+
memory unsafety. See <https://github.com/rust-osdev/uefi-rs/issues/1281>.
10+
11+
412
# uefi - 0.29.0 (2024-07-02)
513

614
## Added

uefi/src/proto/device_path/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ pub struct DevicePathHeader {
119119
pub length: u16,
120120
}
121121

122-
impl<'a> TryFrom<&[u8]> for &'a DevicePathHeader {
122+
impl<'a> TryFrom<&'a [u8]> for &'a DevicePathHeader {
123123
type Error = ByteConversionError;
124124

125125
fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {
@@ -265,7 +265,7 @@ impl PartialEq for DevicePathNode {
265265
}
266266
}
267267

268-
impl<'a> TryFrom<&[u8]> for &'a DevicePathNode {
268+
impl<'a> TryFrom<&'a [u8]> for &'a DevicePathNode {
269269
type Error = ByteConversionError;
270270

271271
fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {
@@ -516,7 +516,7 @@ impl PartialEq for DevicePath {
516516
}
517517
}
518518

519-
impl<'a> TryFrom<&[u8]> for &'a DevicePath {
519+
impl<'a> TryFrom<&'a [u8]> for &'a DevicePath {
520520
type Error = ByteConversionError;
521521

522522
fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {

0 commit comments

Comments
 (0)