This is an automated email from the ASF dual-hosted git repository.

rduan pushed a commit to branch emm-dev
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-sgx-sdk.git


The following commit(s) were added to refs/heads/emm-dev by this push:
     new 6f16f4a1 Support intel-sgx-sdk 2.21 and DCAP 1.18
6f16f4a1 is described below

commit 6f16f4a111b6bd55717be7bebbe13e822f1bfe5f
Author: volcano <[email protected]>
AuthorDate: Fri Sep 1 15:18:12 2023 +0800

    Support intel-sgx-sdk 2.21 and DCAP 1.18
---
 buildenv.mk                                        |   4 +
 common/inc/sgx_report2.h                           |   3 +
 sgx_libc/sgx_tlibc_sys/tlibc/gen/sbrk.c            |   7 +
 sgx_serialize/src/types.rs                         | 230 ++++++++++++++++++---
 sgx_trts/src/arch.rs                               |  80 +++----
 sgx_trts/src/edmm/epc.rs                           |   6 +-
 sgx_trts/src/inst/hw/inst.rs                       |   8 +-
 sgx_trts/src/inst/hyper/inst.rs                    |   8 +-
 sgx_trts/src/inst/hyper/mod.rs                     |   6 +-
 sgx_trts/src/inst/sim/inst.rs                      |   8 +-
 sgx_trts/src/inst/sim/mod.rs                       |   6 +-
 sgx_trts/src/se/report.rs                          |  22 +-
 sgx_trts/src/version.rs                            |   2 +-
 sgx_types/src/types/report2.rs                     |   1 +
 sgx_types/src/types/tdx.rs                         | 101 ++++++++-
 tools/docker/02_binutils.sh                        |   2 +-
 tools/docker/Dockerfile.centos8                    |  15 +-
 tools/docker/Dockerfile.ubuntu18.04                |  15 +-
 tools/docker/Dockerfile.ubuntu20.04                |  15 +-
 ...ckerfile.ubuntu18.04 => Dockerfile.ubuntu22.04} |  26 +--
 20 files changed, 437 insertions(+), 128 deletions(-)

diff --git a/buildenv.mk b/buildenv.mk
index a2125f5a..73974b6b 100644
--- a/buildenv.mk
+++ b/buildenv.mk
@@ -67,6 +67,10 @@ else
     COMMON_FLAGS += -fstack-protector-strong
 endif
 
+ifdef _TD_MIGRATION
+    COMMON_FLAGS += -D_TD_MIGRATION
+endif
+
 COMMON_FLAGS += -ffunction-sections -fdata-sections
 
 # turn on compiler warnings as much as possible
diff --git a/common/inc/sgx_report2.h b/common/inc/sgx_report2.h
index 14f76423..355bee8a 100644
--- a/common/inc/sgx_report2.h
+++ b/common/inc/sgx_report2.h
@@ -36,6 +36,8 @@
 #ifndef _SGX_REPORT2_H_
 #define _SGX_REPORT2_H_
 
+#include <stdint.h>
+
 #define TEE_HASH_384_SIZE       48 /* SHA384 */
 #define TEE_MAC_SIZE            32 /* Message SHA 256 HASH Code - 32 bytes */
 
@@ -67,6 +69,7 @@ typedef struct _tee_attributes_t
 #define TEE_REPORT2_TYPE        0x81    /* TEE Report Type2 */
 #define TEE_REPORT2_SUBTYPE     0x0     /* SUBTYPE for Report Type2 is 0 */
 #define TEE_REPORT2_VERSION     0x0     /* VERSION for Report Type2 is 0 */
+#define TEE_REPORT2_VERSION_SERVICETD 0x1 /* VERSION for Report Type2 which 
mr_servicetd is used */
 
 typedef struct _tee_report_type_t {
     uint8_t type;       /* Trusted Execution Environment(TEE) type:
diff --git a/sgx_libc/sgx_tlibc_sys/tlibc/gen/sbrk.c 
b/sgx_libc/sgx_tlibc_sys/tlibc/gen/sbrk.c
index 422d9781..203714f0 100644
--- a/sgx_libc/sgx_tlibc_sys/tlibc/gen/sbrk.c
+++ b/sgx_libc/sgx_tlibc_sys/tlibc/gen/sbrk.c
@@ -41,10 +41,17 @@ SE_DECLSPEC_EXPORT size_t g_peak_heap_used = 0;
 /* Please be aware of: sbrk is not thread safe by default. */
 
 #define RELRO_SECTION_NAME ".data.rel.ro"
+#ifndef _TD_MIGRATION
 static void *heap_base __attribute__((section(RELRO_SECTION_NAME))) = NULL;
 static size_t heap_size __attribute__((section(RELRO_SECTION_NAME))) = 0;
 static int is_edmm_supported __attribute__((section(RELRO_SECTION_NAME))) = 0;
 static size_t heap_min_size __attribute__((section(RELRO_SECTION_NAME))) = 0;
+#else
+void *heap_base = NULL;
+size_t heap_size = 0;
+int is_edmm_supported = 0;
+size_t heap_min_size = 0;
+#endif
 
 unsigned int sgx_heap_init(void *_heap_base, size_t _heap_size, size_t 
_heap_min_size, int _is_edmm_supported)
 {
diff --git a/sgx_serialize/src/types.rs b/sgx_serialize/src/types.rs
index 9a417616..35dc9006 100644
--- a/sgx_serialize/src/types.rs
+++ b/sgx_serialize/src/types.rs
@@ -23,9 +23,9 @@ use sgx_types::types::{
 };
 use sgx_types::types::{
     Attributes, AttributesFlags, ConfigId, CpuSvn, KeyId, KeyName, KeyPolicy, 
KeyRequest,
-    Measurement, MiscAttribute, MiscSelect, Report, Report2, Report2Body, 
Report2Mac, ReportBody,
-    ReportData, TargetInfo, TeeAttributes, TeeCpuSvn, TeeInfo, TeeMeasurement, 
TeeReportData,
-    TeeReportType, TeeTcbInfo, TeeTcbSvn,
+    Measurement, MiscAttribute, MiscSelect, Report, Report2, Report2Body, 
Report2BodyV15,
+    Report2Mac, ReportBody, ReportData, TargetInfo, TeeAttributes, TeeCpuSvn, 
TeeInfo, TeeInfoV15,
+    TeeMeasurement, TeeReportData, TeeReportType, TeeTcbInfo, TeeTcbInfoV15, 
TeeTcbSvn,
 };
 use sgx_types::types::{BaseName, PsSecPropDesc, QuoteNonce, Spid};
 use sgx_types::types::{Ec256PrivateKey, Ec256PublicKey, Ec256SharedKey, 
Ec256Signature};
@@ -1608,14 +1608,6 @@ impl Decodable for TeeInfo {
 
 impl Encodable for TeeTcbInfo {
     fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
-        // let TeeTcbInfo {
-        //     valid: ref _valid,
-        //     tee_tcb_svn: ref _tee_tcb_svn,
-        //     mr_seam: ref _mr_seam,
-        //     mr_seam_signer: ref _mr_seam_signer,
-        //     attributes: ref _attributes,
-        //     reserved: ref _reserved,
-        // } = *self;
         let _valid = unsafe { &*core::ptr::addr_of!(self.valid) };
         let _tee_tcb_svn = unsafe { &*core::ptr::addr_of!(self.tee_tcb_svn) };
         let _mr_seam = unsafe { &*core::ptr::addr_of!(self.mr_seam) };
@@ -1661,20 +1653,6 @@ impl Decodable for TeeTcbInfo {
 
 impl Encodable for Report2Body {
     fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
-        // let Report2Body {
-        //     tee_tcb_svn: ref _tee_tcb_svn,
-        //     mr_seam: ref _mr_seam,
-        //     mrsigner_seam: ref _mrsigner_seam,
-        //     seam_attributes: ref _seam_attributes,
-        //     td_attributes: ref _td_attributes,
-        //     xfam: ref _xfam,
-        //     mr_td: ref _mr_td,
-        //     mr_config_id: ref _mr_config_id,
-        //     mr_owner: ref _mr_owner,
-        //     mr_owner_config: ref _mr_owner_config,
-        //     rt_mr: ref _rt_mr,
-        //     report_data: ref _report_data,
-        // } = *self;
         let _tee_tcb_svn = unsafe { &*core::ptr::addr_of!(self.tee_tcb_svn) };
         let _mr_seam = unsafe { &*core::ptr::addr_of!(self.mr_seam) };
         let _mrsigner_seam = unsafe { 
&*core::ptr::addr_of!(self.mrsigner_seam) };
@@ -1753,3 +1731,205 @@ impl Decodable for Report2Body {
         })
     }
 }
+
+impl Encodable for TeeInfoV15 {
+    fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
+        let TeeInfoV15 {
+            attributes: ref _attributes,
+            xfam: ref _xfam,
+            mr_td: ref _mr_td,
+            mr_config_id: ref _mr_config_id,
+            mr_owner: ref _mr_owner,
+            mr_owner_config: ref _mr_owner_config,
+            rt_mr: ref _rt_mr,
+            mr_servicetd: ref _mr_servicetd,
+            reserved: ref _reserved,
+        } = *self;
+        e.emit_struct("TeeInfoV15", 8usize, |e| -> _ {
+            e.emit_struct_field("attributes", 0usize, |e| -> _ {
+                Encodable::encode(&*_attributes, e)
+            })?;
+            e.emit_struct_field("xfam", 1usize, |e| -> _ { 
Encodable::encode(&*_xfam, e) })?;
+            e.emit_struct_field("mr_td", 2usize, |e| -> _ { 
Encodable::encode(&*_mr_td, e) })?;
+            e.emit_struct_field("mr_config_id", 3usize, |e| -> _ {
+                Encodable::encode(&*_mr_config_id, e)
+            })?;
+            e.emit_struct_field("mr_owner", 4usize, |e| -> _ {
+                Encodable::encode(&*_mr_owner, e)
+            })?;
+            e.emit_struct_field("mr_owner_config", 5usize, |e| -> _ {
+                Encodable::encode(&*_mr_owner_config, e)
+            })?;
+            e.emit_struct_field("rt_mr", 6usize, |e| -> _ { 
Encodable::encode(&*_rt_mr, e) })?;
+            e.emit_struct_field("mr_servicetd", 7usize, |e| -> _ {
+                Encodable::encode(&*_mr_servicetd, e)
+            })?;
+            e.emit_struct_field("reserved", 8usize, |e| -> _ {
+                Encodable::encode(&*_reserved, e)
+            })
+        })
+    }
+}
+
+impl Decodable for TeeInfoV15 {
+    fn decode<D: Decoder>(d: &mut D) -> Result<TeeInfoV15, D::Error> {
+        d.read_struct("TeeInfoV15", 8usize, |d| -> _ {
+            Ok(TeeInfoV15 {
+                attributes: d.read_struct_field("attributes", 0usize, 
Decodable::decode)?,
+                xfam: d.read_struct_field("xfam", 1usize, Decodable::decode)?,
+                mr_td: d.read_struct_field("mr_td", 2usize, 
Decodable::decode)?,
+                mr_config_id: d.read_struct_field("mr_config_id", 3usize, 
Decodable::decode)?,
+                mr_owner: d.read_struct_field("mr_owner", 4usize, 
Decodable::decode)?,
+                mr_owner_config: d.read_struct_field(
+                    "mr_owner_config",
+                    5usize,
+                    Decodable::decode,
+                )?,
+                rt_mr: d.read_struct_field("rt_mr", 6usize, 
Decodable::decode)?,
+                mr_servicetd: d.read_struct_field("mr_servicetd", 7usize, 
Decodable::decode)?,
+                reserved: d.read_struct_field("reserved", 8usize, 
Decodable::decode)?,
+            })
+        })
+    }
+}
+
+impl Encodable for TeeTcbInfoV15 {
+    fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
+        let _valid = unsafe { &*core::ptr::addr_of!(self.valid) };
+        let _tee_tcb_svn = unsafe { &*core::ptr::addr_of!(self.tee_tcb_svn) };
+        let _mr_seam = unsafe { &*core::ptr::addr_of!(self.mr_seam) };
+        let _mr_seam_signer = unsafe { 
&*core::ptr::addr_of!(self.mr_seam_signer) };
+        let _attributes = unsafe { &*core::ptr::addr_of!(self.attributes) };
+        let _tee_tcb_svn2 = unsafe { &*core::ptr::addr_of!(self.tee_tcb_svn2) 
};
+        let _reserved = unsafe { &*core::ptr::addr_of!(self.reserved) };
+
+        e.emit_struct("TeeTcbInfoV15", 6usize, |e| -> _ {
+            e.emit_struct_field("valid", 0usize, |e| -> _ { 
Encodable::encode(&*_valid, e) })?;
+            e.emit_struct_field("tee_tcb_svn", 1usize, |e| -> _ {
+                Encodable::encode(&*_tee_tcb_svn, e)
+            })?;
+            e.emit_struct_field("mr_seam", 2usize, |e| -> _ {
+                Encodable::encode(&*_mr_seam, e)
+            })?;
+            e.emit_struct_field("mr_seam_signer", 3usize, |e| -> _ {
+                Encodable::encode(&*_mr_seam_signer, e)
+            })?;
+            e.emit_struct_field("attributes", 4usize, |e| -> _ {
+                Encodable::encode(&*_attributes, e)
+            })?;
+            e.emit_struct_field("tee_tcb_svn2", 5usize, |e| -> _ {
+                Encodable::encode(&*_tee_tcb_svn2, e)
+            })?;
+            e.emit_struct_field("reserved", 6usize, |e| -> _ {
+                Encodable::encode(&*_reserved, e)
+            })
+        })
+    }
+}
+
+impl Decodable for TeeTcbInfoV15 {
+    fn decode<D: Decoder>(d: &mut D) -> Result<TeeTcbInfoV15, D::Error> {
+        d.read_struct("TeeTcbInfoV15", 8usize, |d| -> _ {
+            Ok(TeeTcbInfoV15 {
+                valid: d.read_struct_field("valid", 0usize, 
Decodable::decode)?,
+                tee_tcb_svn: d.read_struct_field("tee_tcb_svn", 1usize, 
Decodable::decode)?,
+                mr_seam: d.read_struct_field("mr_seam", 2usize, 
Decodable::decode)?,
+                mr_seam_signer: d.read_struct_field("mr_seam_signer", 3usize, 
Decodable::decode)?,
+                attributes: d.read_struct_field("attributes", 4usize, 
Decodable::decode)?,
+                tee_tcb_svn2: d.read_struct_field("tee_tcb_svn2", 5usize, 
Decodable::decode)?,
+                reserved: d.read_struct_field("reserved", 6usize, 
Decodable::decode)?,
+            })
+        })
+    }
+}
+
+impl Encodable for Report2BodyV15 {
+    fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
+        let _tee_tcb_svn = unsafe { &*core::ptr::addr_of!(self.tee_tcb_svn) };
+        let _mr_seam = unsafe { &*core::ptr::addr_of!(self.mr_seam) };
+        let _mrsigner_seam = unsafe { 
&*core::ptr::addr_of!(self.mrsigner_seam) };
+        let _seam_attributes = unsafe { 
&*core::ptr::addr_of!(self.seam_attributes) };
+        let _td_attributes = unsafe { 
&*core::ptr::addr_of!(self.td_attributes) };
+        let _xfam = unsafe { &*core::ptr::addr_of!(self.xfam) };
+        let _mr_td = unsafe { &*core::ptr::addr_of!(self.mr_td) };
+        let _mr_config_id = unsafe { &*core::ptr::addr_of!(self.mr_config_id) 
};
+        let _mr_owner = unsafe { &*core::ptr::addr_of!(self.mr_owner) };
+        let _mr_owner_config = unsafe { 
&*core::ptr::addr_of!(self.mr_owner_config) };
+        let _rt_mr = unsafe { &*core::ptr::addr_of!(self.rt_mr) };
+        let _report_data = unsafe { &*core::ptr::addr_of!(self.report_data) };
+        let _tee_tcb_svn2 = unsafe { &*core::ptr::addr_of!(self.tee_tcb_svn2) 
};
+        let _mr_servicetd = unsafe { &*core::ptr::addr_of!(self.mr_servicetd) 
};
+
+        e.emit_struct("Report2BodyV15", 12usize, |e| -> _ {
+            e.emit_struct_field("tee_tcb_svn", 0usize, |e| -> _ {
+                Encodable::encode(&*_tee_tcb_svn, e)
+            })?;
+            e.emit_struct_field("mr_seam", 1usize, |e| -> _ {
+                Encodable::encode(&*_mr_seam, e)
+            })?;
+            e.emit_struct_field("mrsigner_seam", 2usize, |e| -> _ {
+                Encodable::encode(&*_mrsigner_seam, e)
+            })?;
+            e.emit_struct_field("seam_attributes", 3usize, |e| -> _ {
+                Encodable::encode(&*_seam_attributes, e)
+            })?;
+            e.emit_struct_field("td_attributes", 4usize, |e| -> _ {
+                Encodable::encode(&*_td_attributes, e)
+            })?;
+            e.emit_struct_field("xfam", 5usize, |e| -> _ { 
Encodable::encode(&*_xfam, e) })?;
+            e.emit_struct_field("mr_td", 6usize, |e| -> _ { 
Encodable::encode(&*_mr_td, e) })?;
+            e.emit_struct_field("mr_config_id", 7usize, |e| -> _ {
+                Encodable::encode(&*_mr_config_id, e)
+            })?;
+            e.emit_struct_field("mr_owner", 8usize, |e| -> _ {
+                Encodable::encode(&*_mr_owner, e)
+            })?;
+            e.emit_struct_field("mr_owner_config", 9usize, |e| -> _ {
+                Encodable::encode(&*_mr_owner_config, e)
+            })?;
+            e.emit_struct_field("rt_mr", 10usize, |e| -> _ {
+                Encodable::encode(&*_rt_mr, e)
+            })?;
+            e.emit_struct_field("report_data", 11usize, |e| -> _ {
+                Encodable::encode(&*_report_data, e)
+            })?;
+            e.emit_struct_field("tee_tcb_svn2", 12usize, |e| -> _ {
+                Encodable::encode(&*_tee_tcb_svn2, e)
+            })?;
+            e.emit_struct_field("mr_servicetd", 13usize, |e| -> _ {
+                Encodable::encode(&*_mr_servicetd, e)
+            })
+        })
+    }
+}
+
+impl Decodable for Report2BodyV15 {
+    fn decode<D: Decoder>(d: &mut D) -> Result<Report2BodyV15, D::Error> {
+        d.read_struct("Report2BodyV15", 8usize, |d| -> _ {
+            Ok(Report2BodyV15 {
+                tee_tcb_svn: d.read_struct_field("tee_tcb_svn", 0usize, 
Decodable::decode)?,
+                mr_seam: d.read_struct_field("mr_seam", 1usize, 
Decodable::decode)?,
+                mrsigner_seam: d.read_struct_field("mrsigner_seam", 2usize, 
Decodable::decode)?,
+                seam_attributes: d.read_struct_field(
+                    "seam_attributes",
+                    3usize,
+                    Decodable::decode,
+                )?,
+                td_attributes: d.read_struct_field("td_attributes", 4usize, 
Decodable::decode)?,
+                xfam: d.read_struct_field("xfam", 5usize, Decodable::decode)?,
+                mr_td: d.read_struct_field("mr_td", 6usize, 
Decodable::decode)?,
+                mr_config_id: d.read_struct_field("mr_config_id", 7usize, 
Decodable::decode)?,
+                mr_owner: d.read_struct_field("mr_owner", 8usize, 
Decodable::decode)?,
+                mr_owner_config: d.read_struct_field(
+                    "mr_owner_config",
+                    9usize,
+                    Decodable::decode,
+                )?,
+                rt_mr: d.read_struct_field("rt_mr", 10usize, 
Decodable::decode)?,
+                report_data: d.read_struct_field("report_data", 11usize, 
Decodable::decode)?,
+                tee_tcb_svn2: d.read_struct_field("tee_tcb_svn2", 12usize, 
Decodable::decode)?,
+                mr_servicetd: d.read_struct_field("mr_servicetd", 13usize, 
Decodable::decode)?,
+            })
+        })
+    }
+}
diff --git a/sgx_trts/src/arch.rs b/sgx_trts/src/arch.rs
index 4764f1fe..d36fb09a 100644
--- a/sgx_trts/src/arch.rs
+++ b/sgx_trts/src/arch.rs
@@ -17,7 +17,7 @@
 
 #![allow(clippy::enum_variant_names)]
 
-use crate::edmm::{PageInfo, PageType};
+use crate::edmm::{self, PageType};
 use crate::tcs::tc;
 use crate::version::*;
 use crate::xsave;
@@ -685,7 +685,7 @@ impl ExitInfo {
 impl_bitflags! {
     #[repr(C)]
     #[derive(Clone, Copy, Debug, Eq, PartialEq)]
-    pub struct SecinfoFlags: u64 {
+    pub struct SecInfoFlags: u64 {
         const R        = 0b0000_0000_0000_0001;
         const W        = 0b0000_0000_0000_0010;
         const X        = 0b0000_0000_0000_0100;
@@ -704,9 +704,9 @@ impl_bitflags! {
     }
 }
 
-impl SecinfoFlags {
+impl SecInfoFlags {
     pub fn page_type(&self) -> u8 {
-        (((*self & SecinfoFlags::PT_MASK).bits()) >> 8) as u8
+        (((*self & SecInfoFlags::PT_MASK).bits()) >> 8) as u8
     }
 
     pub fn page_type_mut(&mut self) -> &mut u8 {
@@ -717,102 +717,102 @@ impl SecinfoFlags {
     }
 }
 
-impl From<PageType> for SecinfoFlags {
-    fn from(data: PageType) -> SecinfoFlags {
-        SecinfoFlags::from_bits_truncate((data as u64) << 8)
+impl From<PageType> for SecInfoFlags {
+    fn from(data: PageType) -> SecInfoFlags {
+        SecInfoFlags::from_bits_truncate((data as u64) << 8)
     }
 }
 
-impl From<PageInfo> for SecinfoFlags {
-    fn from(data: PageInfo) -> SecinfoFlags {
+impl From<edmm::PageInfo> for SecInfoFlags {
+    fn from(data: edmm::PageInfo) -> SecInfoFlags {
         let typ = data.typ as u64;
         let flags = data.flags.bits() as u64;
-        SecinfoFlags::from_bits_truncate((typ << 8) | flags)
+        SecInfoFlags::from_bits_truncate((typ << 8) | flags)
     }
 }
 
 #[repr(C, align(64))]
 #[derive(Clone, Copy)]
-pub struct Secinfo {
-    pub flags: SecinfoFlags,
+pub struct SecInfo {
+    pub flags: SecInfoFlags,
     pub _reserved1: [u8; 56],
 }
 
-impl fmt::Debug for Secinfo {
+impl fmt::Debug for SecInfo {
     fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
-        fmt.debug_struct("Secinfo")
+        fmt.debug_struct("SecInfo")
             .field("flags", &self.flags.bits())
             .finish()
     }
 }
 
-impl Secinfo {
-    pub fn new(flags: SecinfoFlags) -> Secinfo {
-        Secinfo {
+impl SecInfo {
+    pub fn new(flags: SecInfoFlags) -> SecInfo {
+        SecInfo {
             flags,
             _reserved1: [0_u8; 56],
         }
     }
 }
 
-impl Default for Secinfo {
-    fn default() -> Secinfo {
-        Secinfo {
-            flags: SecinfoFlags::empty(),
+impl Default for SecInfo {
+    fn default() -> SecInfo {
+        SecInfo {
+            flags: SecInfoFlags::empty(),
             _reserved1: [0_u8; 56],
         }
     }
 }
 
-impl Secinfo {
-    pub const ALIGN_SIZE: usize = mem::size_of::<Secinfo>();
+impl SecInfo {
+    pub const ALIGN_SIZE: usize = mem::size_of::<SecInfo>();
 }
 
-impl AsRef<[u8; Secinfo::ALIGN_SIZE]> for Secinfo {
-    fn as_ref(&self) -> &[u8; Secinfo::ALIGN_SIZE] {
+impl AsRef<[u8; SecInfo::ALIGN_SIZE]> for SecInfo {
+    fn as_ref(&self) -> &[u8; SecInfo::ALIGN_SIZE] {
         unsafe { &*(self as *const _ as *const _) }
     }
 }
 
-impl AsRef<Align64<[u8; Secinfo::ALIGN_SIZE]>> for Secinfo {
-    fn as_ref(&self) -> &Align64<[u8; Secinfo::ALIGN_SIZE]> {
+impl AsRef<Align64<[u8; SecInfo::ALIGN_SIZE]>> for SecInfo {
+    fn as_ref(&self) -> &Align64<[u8; SecInfo::ALIGN_SIZE]> {
         unsafe { &*(self as *const _ as *const _) }
     }
 }
 
-impl From<SecinfoFlags> for Secinfo {
-    fn from(flags: SecinfoFlags) -> Secinfo {
-        Secinfo::new(flags)
+impl From<SecInfoFlags> for SecInfo {
+    fn from(flags: SecInfoFlags) -> SecInfo {
+        SecInfo::new(flags)
     }
 }
 
-impl From<PageInfo> for Secinfo {
-    fn from(data: PageInfo) -> Secinfo {
-        Secinfo::from(SecinfoFlags::from(data))
+impl From<edmm::PageInfo> for SecInfo {
+    fn from(data: edmm::PageInfo) -> SecInfo {
+        SecInfo::from(SecInfoFlags::from(data))
     }
 }
 
 #[repr(C, align(32))]
 #[derive(Clone, Copy, Debug)]
-pub struct Pageinfo {
+pub struct PageInfo {
     pub linaddr: u64,
     pub srcpage: u64,
     pub secinfo: u64,
     pub secs: u64,
 }
 
-impl Pageinfo {
-    pub const ALIGN_SIZE: usize = mem::size_of::<Pageinfo>();
+impl PageInfo {
+    pub const ALIGN_SIZE: usize = mem::size_of::<PageInfo>();
 }
 
-impl AsRef<[u8; Pageinfo::ALIGN_SIZE]> for Pageinfo {
-    fn as_ref(&self) -> &[u8; Pageinfo::ALIGN_SIZE] {
+impl AsRef<[u8; PageInfo::ALIGN_SIZE]> for PageInfo {
+    fn as_ref(&self) -> &[u8; PageInfo::ALIGN_SIZE] {
         unsafe { &*(self as *const _ as *const _) }
     }
 }
 
-impl AsRef<Align32<[u8; Pageinfo::ALIGN_SIZE]>> for Pageinfo {
-    fn as_ref(&self) -> &Align32<[u8; Pageinfo::ALIGN_SIZE]> {
+impl AsRef<Align32<[u8; PageInfo::ALIGN_SIZE]>> for PageInfo {
+    fn as_ref(&self) -> &Align32<[u8; PageInfo::ALIGN_SIZE]> {
         unsafe { &*(self as *const _ as *const _) }
     }
 }
diff --git a/sgx_trts/src/edmm/epc.rs b/sgx_trts/src/edmm/epc.rs
index 446ecec8..05c966ad 100644
--- a/sgx_trts/src/edmm/epc.rs
+++ b/sgx_trts/src/edmm/epc.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License..
 
-use crate::arch::{Secinfo, SE_PAGE_SHIFT, SE_PAGE_SIZE};
+use crate::arch::{SecInfo, SE_PAGE_SHIFT, SE_PAGE_SIZE};
 use crate::enclave::is_within_enclave;
 use crate::inst::EncluInst;
 use core::num::NonZeroUsize;
@@ -204,12 +204,12 @@ impl Page {
     }
 
     pub fn accept(&self) -> SgxResult {
-        let secinfo: Secinfo = self.info.into();
+        let secinfo: SecInfo = self.info.into();
         EncluInst::eaccept(&secinfo, self.addr).map_err(|_| 
SgxStatus::Unexpected)
     }
 
     pub fn modpe(&self) -> SgxResult {
-        let secinfo: Secinfo = self.info.into();
+        let secinfo: SecInfo = self.info.into();
         EncluInst::emodpe(&secinfo, self.addr).map_err(|_| 
SgxStatus::Unexpected)
     }
 }
diff --git a/sgx_trts/src/inst/hw/inst.rs b/sgx_trts/src/inst/hw/inst.rs
index 497ea05d..c97a5a2c 100644
--- a/sgx_trts/src/inst/hw/inst.rs
+++ b/sgx_trts/src/inst/hw/inst.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License..
 
-use crate::arch::{Enclu, Secinfo};
+use crate::arch::{Enclu, SecInfo};
 use crate::se::{
     AlignKey, AlignKeyRequest, AlignReport, AlignReport2Mac, AlignReportData, 
AlignTargetInfo,
 };
@@ -75,7 +75,7 @@ impl EncluInst {
         }
     }
 
-    pub fn eaccept(info: &Secinfo, addr: usize) -> Result<(), u32> {
+    pub fn eaccept(info: &SecInfo, addr: usize) -> Result<(), u32> {
         unsafe {
             let error;
             asm!(
@@ -94,7 +94,7 @@ impl EncluInst {
         }
     }
 
-    pub fn eacceptcopy(info: &Secinfo, addr: usize, source: usize) -> 
Result<(), u32> {
+    pub fn eacceptcopy(info: &SecInfo, addr: usize, source: usize) -> 
Result<(), u32> {
         unsafe {
             let error;
             asm!(
@@ -114,7 +114,7 @@ impl EncluInst {
         }
     }
 
-    pub fn emodpe(info: &Secinfo, addr: usize) -> Result<(), u32> {
+    pub fn emodpe(info: &SecInfo, addr: usize) -> Result<(), u32> {
         unsafe {
             asm!(
                 "xchg rbx, {0}",
diff --git a/sgx_trts/src/inst/hyper/inst.rs b/sgx_trts/src/inst/hyper/inst.rs
index fcf8a689..b7b97f21 100644
--- a/sgx_trts/src/inst/hyper/inst.rs
+++ b/sgx_trts/src/inst/hyper/inst.rs
@@ -17,7 +17,7 @@
 
 #![allow(clippy::enum_variant_names)]
 
-use crate::arch::Secinfo;
+use crate::arch::SecInfo;
 use crate::inst::INVALID_LEAF;
 use crate::se::{
     AlignKey, AlignKeyRequest, AlignReport, AlignReport2Mac, AlignReportData, 
AlignTargetInfo,
@@ -93,17 +93,17 @@ impl EncluInst {
     }
 
     #[inline]
-    pub fn eaccept(_info: &Secinfo, _addr: usize) -> Result<(), u32> {
+    pub fn eaccept(_info: &SecInfo, _addr: usize) -> Result<(), u32> {
         Ok(())
     }
 
     #[inline]
-    pub fn eacceptcopy(_info: &Secinfo, _addr: usize, _source: usize) -> 
Result<(), u32> {
+    pub fn eacceptcopy(_info: &SecInfo, _addr: usize, _source: usize) -> 
Result<(), u32> {
         Ok(())
     }
 
     #[inline]
-    pub fn emodpe(_info: &Secinfo, _addr: usize) -> Result<(), u32> {
+    pub fn emodpe(_info: &SecInfo, _addr: usize) -> Result<(), u32> {
         Ok(())
     }
 }
diff --git a/sgx_trts/src/inst/hyper/mod.rs b/sgx_trts/src/inst/hyper/mod.rs
index 00989896..9d638b5f 100644
--- a/sgx_trts/src/inst/hyper/mod.rs
+++ b/sgx_trts/src/inst/hyper/mod.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License..
 
-use crate::arch::{Enclu, Secinfo};
+use crate::arch::{Enclu, SecInfo};
 use crate::call::MsbufInfo;
 use crate::error::abort;
 use crate::fence::lfence;
@@ -63,11 +63,11 @@ pub unsafe extern "C" fn se3(
             }
             Err(e) => e as usize,
         },
-        Enclu::EAccept => match EncluInst::eaccept(&*(rbx as *const Secinfo), 
rcx) {
+        Enclu::EAccept => match EncluInst::eaccept(&*(rbx as *const SecInfo), 
rcx) {
             Ok(_) => 0,
             Err(e) => e as usize,
         },
-        Enclu::EModpe => match EncluInst::emodpe(&*(rbx as *const Secinfo), 
rcx) {
+        Enclu::EModpe => match EncluInst::emodpe(&*(rbx as *const SecInfo), 
rcx) {
             Ok(_) => 0,
             Err(e) => e as usize,
         },
diff --git a/sgx_trts/src/inst/sim/inst.rs b/sgx_trts/src/inst/sim/inst.rs
index 30af1fe9..93287cd8 100644
--- a/sgx_trts/src/inst/sim/inst.rs
+++ b/sgx_trts/src/inst/sim/inst.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License..
 
-use crate::arch::{Secinfo, Tcs};
+use crate::arch::{SecInfo, Tcs};
 use crate::enclave::EnclaveRange;
 use crate::error::abort as gp;
 use crate::inst::sim::derive::{self, DeriveData, SeOwnerEpoch};
@@ -404,17 +404,17 @@ impl EncluInst {
     }
 
     #[inline]
-    pub fn eaccept(_info: &Secinfo, _addr: usize) -> Result<(), u32> {
+    pub fn eaccept(_info: &SecInfo, _addr: usize) -> Result<(), u32> {
         Ok(())
     }
 
     #[inline]
-    pub fn eacceptcopy(_info: &Secinfo, _addr: usize, _source: usize) -> 
Result<(), u32> {
+    pub fn eacceptcopy(_info: &SecInfo, _addr: usize, _source: usize) -> 
Result<(), u32> {
         Ok(())
     }
 
     #[inline]
-    pub fn emodpe(_info: &Secinfo, _addr: usize) -> Result<(), u32> {
+    pub fn emodpe(_info: &SecInfo, _addr: usize) -> Result<(), u32> {
         Ok(())
     }
 
diff --git a/sgx_trts/src/inst/sim/mod.rs b/sgx_trts/src/inst/sim/mod.rs
index e89942b1..5d047a83 100644
--- a/sgx_trts/src/inst/sim/mod.rs
+++ b/sgx_trts/src/inst/sim/mod.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License..
 
-use crate::arch::{Enclu, Secinfo, Secs, Tcs};
+use crate::arch::{Enclu, SecInfo, Secs, Tcs};
 use crate::error::abort;
 use crate::se::{AlignKey, AlignKeyRequest, AlignReport, AlignReportData, 
AlignTargetInfo};
 use core::convert::TryFrom;
@@ -66,11 +66,11 @@ pub unsafe extern "C" fn se3(
             }
             Err(e) => e as usize,
         },
-        Enclu::EAccept => match EncluInst::eaccept(&*(rbx as *const Secinfo), 
rcx) {
+        Enclu::EAccept => match EncluInst::eaccept(&*(rbx as *const SecInfo), 
rcx) {
             Ok(_) => 0,
             Err(e) => e as usize,
         },
-        Enclu::EModpe => match EncluInst::emodpe(&*(rbx as *const Secinfo), 
rcx) {
+        Enclu::EModpe => match EncluInst::emodpe(&*(rbx as *const SecInfo), 
rcx) {
             Ok(_) => 0,
             Err(e) => e as usize,
         },
diff --git a/sgx_trts/src/se/report.rs b/sgx_trts/src/se/report.rs
index 04b3f5fd..2f807949 100644
--- a/sgx_trts/src/se/report.rs
+++ b/sgx_trts/src/se/report.rs
@@ -31,8 +31,10 @@ use sgx_types::types::{
 };
 use sgx_types::types::{
     CONFIGID_SIZE, CPUSVN_SIZE, HASH_SIZE, ISVEXT_PROD_ID_SIZE, 
ISV_FAMILY_ID_SIZE, KEYID_SIZE,
-    MAC_SIZE, REPORT_BODY_RESERVED1_BYTES, REPORT_BODY_RESERVED2_BYTES,
-    REPORT_BODY_RESERVED3_BYTES, REPORT_BODY_RESERVED4_BYTES, REPORT_DATA_SIZE,
+    MAC_SIZE, REPORT2_MAC_RESERVED1_BYTES, REPORT2_MAC_RESERVED2_BYTES,
+    REPORT_BODY_RESERVED1_BYTES, REPORT_BODY_RESERVED2_BYTES, 
REPORT_BODY_RESERVED3_BYTES,
+    REPORT_BODY_RESERVED4_BYTES, REPORT_DATA_SIZE, TEE_REPORT2_SUBTYPE, 
TEE_REPORT2_TYPE,
+    TEE_REPORT2_VERSION, TEE_REPORT2_VERSION_SERVICETD,
 };
 
 #[repr(C, align(128))]
@@ -149,6 +151,22 @@ impl AlignReport {
 impl AlignReport2Mac {
     pub fn verify(&self) -> SgxResult {
         ensure!(self.is_enclave_range(), SgxStatus::InvalidParameter);
+        ensure!(
+            self.0.report_type.report_type == TEE_REPORT2_TYPE,
+            SgxStatus::InvalidParameter
+        );
+        ensure!(
+            self.0.report_type.subtype == TEE_REPORT2_SUBTYPE
+                && (self.0.report_type.version == TEE_REPORT2_VERSION
+                    || self.0.report_type.version == 
TEE_REPORT2_VERSION_SERVICETD),
+            SgxStatus::InvalidParameter
+        );
+        ensure!(
+            self.0.report_type.reserved == 0
+                && self.0.reserved1 == [0; REPORT2_MAC_RESERVED1_BYTES]
+                && self.0.reserved2 == [0; REPORT2_MAC_RESERVED2_BYTES],
+            SgxStatus::InvalidParameter
+        );
 
         EncluInst::everify_report2(self).map_err(|e| match e {
             inst::INVALID_REPORTMACSTRUCT => SgxStatus::MacMismatch,
diff --git a/sgx_trts/src/version.rs b/sgx_trts/src/version.rs
index 93bb9598..15a37844 100644
--- a/sgx_trts/src/version.rs
+++ b/sgx_trts/src/version.rs
@@ -16,6 +16,6 @@
 // under the License..
 
 pub const MAJOR_VERSION: usize = 2;
-pub const MINOR_VERSION: usize = 20;
+pub const MINOR_VERSION: usize = 21;
 pub const REVISION_VERSION: usize = 100;
 pub const VERSION_UINT: usize = (MAJOR_VERSION << 32) | (MINOR_VERSION << 16) 
| REVISION_VERSION;
diff --git a/sgx_types/src/types/report2.rs b/sgx_types/src/types/report2.rs
index 7f032d4e..e27af19f 100644
--- a/sgx_types/src/types/report2.rs
+++ b/sgx_types/src/types/report2.rs
@@ -107,6 +107,7 @@ pub const LEGACY_REPORT_TYPE: u8 = 0x0; // SGX Legacy 
Report Type
 pub const TEE_REPORT2_TYPE: u8 = 0x81; // TEE Report Type2
 pub const TEE_REPORT2_SUBTYPE: u8 = 0x0; // SUBTYPE for Report Type2 is 0
 pub const TEE_REPORT2_VERSION: u8 = 0x0; // VERSION for Report Type2 is 0
+pub const TEE_REPORT2_VERSION_SERVICETD: u8 = 0x1; // VERSION for Report Type2 
which mr_servicetd is used
 
 impl_struct! {
     #[repr(C)]
diff --git a/sgx_types/src/types/tdx.rs b/sgx_types/src/types/tdx.rs
index f3b7dba0..d68dff8b 100644
--- a/sgx_types/src/types/tdx.rs
+++ b/sgx_types/src/types/tdx.rs
@@ -51,8 +51,8 @@ impl_unsafe_marker_for! {
     TeeTcbSvn
 }
 
-pub const TD_INFO_RESERVED_BYTES: usize = 112;
-pub const TD_TEE_TCB_INFO_RESERVED_BYTES: usize = 111;
+pub const TD_INFO_RESERVED_BYTES_V1: usize = 112;
+pub const TD_TEE_TCB_INFO_RESERVED_BYTES_V1: usize = 111;
 
 #[derive(Clone, Copy, Debug)]
 #[repr(C)]
@@ -64,7 +64,7 @@ pub struct TeeInfo {
     pub mr_owner: TeeMeasurement,
     pub mr_owner_config: TeeMeasurement,
     pub rt_mr: [TeeMeasurement; 4],
-    pub reserved: [u8; TD_INFO_RESERVED_BYTES],
+    pub reserved: [u8; TD_INFO_RESERVED_BYTES_V1],
 }
 
 #[derive(Clone, Copy, Debug)]
@@ -75,7 +75,7 @@ pub struct TeeTcbInfo {
     pub mr_seam: TeeMeasurement,
     pub mr_seam_signer: TeeMeasurement,
     pub attributes: TeeAttributes,
-    pub reserved: [u8; TD_TEE_TCB_INFO_RESERVED_BYTES],
+    pub reserved: [u8; TD_TEE_TCB_INFO_RESERVED_BYTES_V1],
 }
 
 #[derive(Clone, Copy, Debug)]
@@ -144,6 +144,7 @@ impl_struct_ContiguousMemory! {
     TeeTcbInfo;
     QeReportCertificationData;
     EcdsaSigDataV4;
+    Quote4Header;
     Quote4;
 }
 
@@ -207,6 +208,98 @@ impl Quote4 {
     }
 }
 
+/* intel DCAP 1.18 */
+//
+// sgx_quote_5.h
+//
+
+pub const TD_INFO_RESERVED_BYTES_V15: usize = 64;
+pub const TD_TEE_TCB_INFO_RESERVED_BYTES_V15: usize = 95;
+
+#[derive(Clone, Copy, Debug)]
+#[repr(C)]
+pub struct TeeInfoV15 {
+    pub attributes: TeeAttributes,
+    pub xfam: TeeAttributes,
+    pub mr_td: TeeMeasurement,
+    pub mr_config_id: TeeMeasurement,
+    pub mr_owner: TeeMeasurement,
+    pub mr_owner_config: TeeMeasurement,
+    pub rt_mr: [TeeMeasurement; 4],
+    pub mr_servicetd: TeeMeasurement,
+    pub reserved: [u8; TD_INFO_RESERVED_BYTES_V15],
+}
+
+#[derive(Clone, Copy, Debug)]
+#[repr(C, packed)]
+pub struct TeeTcbInfoV15 {
+    pub valid: [u8; 8],
+    pub tee_tcb_svn: TeeTcbSvn,
+    pub mr_seam: TeeMeasurement,
+    pub mr_seam_signer: TeeMeasurement,
+    pub attributes: TeeAttributes,
+    pub tee_tcb_svn2: TeeTcbSvn,
+    pub reserved: [u8; TD_TEE_TCB_INFO_RESERVED_BYTES_V15],
+}
+
+pub type Quote5Header = Quote4Header;
+
+#[derive(Clone, Copy, Debug, Default)]
+#[repr(C, packed)]
+pub struct Report2BodyV15 {
+    pub tee_tcb_svn: TeeTcbSvn,
+    pub mr_seam: TeeMeasurement,
+    pub mrsigner_seam: TeeMeasurement,
+    pub seam_attributes: TeeAttributes,
+    pub td_attributes: TeeAttributes,
+    pub xfam: TeeAttributes,
+    pub mr_td: TeeMeasurement,
+    pub mr_config_id: TeeMeasurement,
+    pub mr_owner: TeeMeasurement,
+    pub mr_owner_config: TeeMeasurement,
+    pub rt_mr: [TeeMeasurement; 4],
+    pub report_data: TeeReportData,
+    pub tee_tcb_svn2: TeeTcbSvn,
+    pub mr_servicetd: TeeMeasurement,
+}
+
+#[derive(Clone, Copy, Debug)]
+#[repr(C, packed)]
+pub struct Quote5 {
+    pub header: Quote5Header,
+    pub quote_type: u16,
+    pub size: u32,
+    pub body: [u8; 0],
+}
+
+impl_struct_default! {
+    TeeInfoV15; //512
+    TeeTcbInfoV15; //239
+}
+
+impl_struct_ContiguousMemory! {
+    TeeInfoV15;
+    TeeTcbInfoV15;
+    Report2BodyV15;
+    Quote5;
+}
+
+impl_asref_array! {
+    TeeInfoV15;
+    TeeTcbInfoV15;
+    Report2BodyV15;
+}
+
+impl Quote5 {
+    /// # Safety
+    pub unsafe fn as_slice_unchecked(&self) -> &[u8] {
+        slice::from_raw_parts(
+            self as *const _ as *const u8,
+            mem::size_of::<Quote5>() + self.size as usize,
+        )
+    }
+}
+
 /* intel DCAP 1.15 */
 //
 // tdx_attes.h
diff --git a/tools/docker/02_binutils.sh b/tools/docker/02_binutils.sh
index 26b13e2a..2ad40137 100755
--- a/tools/docker/02_binutils.sh
+++ b/tools/docker/02_binutils.sh
@@ -20,5 +20,5 @@
 cd /root && \
 wget 
https://download.01.org/intel-sgx/sgx-linux/$SGX_SDK_RELEASE_VERSION/as.ld.objdump.r4.tar.gz
 && \
 tar xzf as.ld.objdump.r4.tar.gz && \
-cp -r external/toolset/$BINUTILS_DIST/* /usr/bin/ && \
+cp -r external/toolset/$TOOLSET_DIST/* /usr/bin/ && \
 rm -rf ./external ./as.ld.objdump.r4.tar.gz
diff --git a/tools/docker/Dockerfile.centos8 b/tools/docker/Dockerfile.centos8
index 1297649c..53b615fd 100644
--- a/tools/docker/Dockerfile.centos8
+++ b/tools/docker/Dockerfile.centos8
@@ -71,18 +71,19 @@ RUN yum install epel-release -y && \
     http://downloads.sourceforge.net/ltp/lcov-1.14-1.noarch.rpm && \
     alternatives --set python /usr/bin/python2
 
-ENV SGX_SDK_RELEASE_VERSION     2.20
-ENV SGX_DCAP_RELEASE_VERSION    1.17
-ENV SGX_SDK_CODE_VERSION        2.20
-ENV SGX_DCAP_CODE_VERSION       1.17
-ENV SGX_SDK_BIN_VERSION         2.20.100.4
-ENV SGX_SDK_PKGS_VERSION        2.20.100.4
-ENV SGX_DCAP_PKGS_VERSION       1.17.100.4
+ENV SGX_SDK_RELEASE_VERSION     2.21
+ENV SGX_DCAP_RELEASE_VERSION    1.18
+ENV SGX_SDK_CODE_VERSION        2.21
+ENV SGX_DCAP_CODE_VERSION       1.18
+ENV SGX_SDK_BIN_VERSION         2.21.100.1
+ENV SGX_SDK_PKGS_VERSION        2.21.100.1
+ENV SGX_DCAP_PKGS_VERSION       1.18.100.1
 ENV SGX_SDK_VERSION             ${SGX_SDK_PKGS_VERSION}
 ENV SGX_DCAP_VERSION            ${SGX_DCAP_PKGS_VERSION}
 ENV RUST_TOOLCHAIN              nightly-2022-10-22
 ENV OS_NAME                     centos
 ENV BINUTILS_DIST               centos8
+ENV TOOLSET_DIST                centos8
 ENV SGX_SDK_URL                 
"https://download.01.org/intel-sgx/sgx-linux/${SGX_SDK_CODE_VERSION}/distro/${OS_NAME}-stream/sgx_linux_x64_sdk_${SGX_SDK_BIN_VERSION}.bin";
 ENV PSW_REPO_URL                
"https://download.01.org/intel-sgx/sgx-linux/${SGX_SDK_RELEASE_VERSION}/distro/${OS_NAME}-stream/sgx_rpm_local_repo.tgz";
 
diff --git a/tools/docker/Dockerfile.ubuntu18.04 
b/tools/docker/Dockerfile.ubuntu18.04
index 4c22b188..74dd0ed0 100644
--- a/tools/docker/Dockerfile.ubuntu18.04
+++ b/tools/docker/Dockerfile.ubuntu18.04
@@ -78,18 +78,19 @@ RUN apt-get update && DEBIAN_FRONTEND="noninteractive" 
apt-get install -y --no-i
     rm -rf /var/lib/apt/lists/*
 
 ENV CODENAME                    bionic
-ENV SGX_SDK_RELEASE_VERSION     2.20
-ENV SGX_DCAP_RELEASE_VERSION    1.17
-ENV SGX_SDK_CODE_VERSION        2.20
-ENV SGX_DCAP_CODE_VERSION       1.17
-ENV SGX_SDK_BIN_VERSION         2.20.100.4
-ENV SGX_SDK_PKGS_VERSION        2.20.100.4
-ENV SGX_DCAP_PKGS_VERSION       1.17.100.4
+ENV SGX_SDK_RELEASE_VERSION     2.21
+ENV SGX_DCAP_RELEASE_VERSION    1.18
+ENV SGX_SDK_CODE_VERSION        2.21
+ENV SGX_DCAP_CODE_VERSION       1.18
+ENV SGX_SDK_BIN_VERSION         2.21.100.1
+ENV SGX_SDK_PKGS_VERSION        2.21.100.1
+ENV SGX_DCAP_PKGS_VERSION       1.18.100.1
 ENV SGX_SDK_VERSION             ${SGX_SDK_PKGS_VERSION}-bionic1
 ENV SGX_DCAP_VERSION            ${SGX_DCAP_PKGS_VERSION}-bionic1
 ENV RUST_TOOLCHAIN              nightly-2022-10-22
 ENV OS_NAME                     ubuntu
 ENV BINUTILS_DIST               ubuntu18.04
+ENV TOOLSET_DIST                ubuntu20.04
 ENV SGX_SDK_URL                 
"https://download.01.org/intel-sgx/sgx-linux/${SGX_SDK_CODE_VERSION}/distro/${BINUTILS_DIST}-server/sgx_linux_x64_sdk_${SGX_SDK_BIN_VERSION}.bin";
 
 ENV LD_LIBRARY_PATH=/usr/lib:/usr/local/lib
diff --git a/tools/docker/Dockerfile.ubuntu20.04 
b/tools/docker/Dockerfile.ubuntu20.04
index 91d0d28e..7d8d8bc8 100644
--- a/tools/docker/Dockerfile.ubuntu20.04
+++ b/tools/docker/Dockerfile.ubuntu20.04
@@ -77,18 +77,19 @@ RUN apt-get update && DEBIAN_FRONTEND="noninteractive" 
apt-get install -y --no-i
     rm -rf /var/lib/apt/lists/*
 
 ENV CODENAME                    focal
-ENV SGX_SDK_RELEASE_VERSION     2.20
-ENV SGX_DCAP_RELEASE_VERSION    1.17
-ENV SGX_SDK_CODE_VERSION        2.20
-ENV SGX_DCAP_CODE_VERSION       1.17
-ENV SGX_SDK_BIN_VERSION         2.20.100.4
-ENV SGX_SDK_PKGS_VERSION        2.20.100.4
-ENV SGX_DCAP_PKGS_VERSION       1.17.100.4
+ENV SGX_SDK_RELEASE_VERSION     2.21
+ENV SGX_DCAP_RELEASE_VERSION    1.18
+ENV SGX_SDK_CODE_VERSION        2.21
+ENV SGX_DCAP_CODE_VERSION       1.18
+ENV SGX_SDK_BIN_VERSION         2.21.100.1
+ENV SGX_SDK_PKGS_VERSION        2.21.100.1
+ENV SGX_DCAP_PKGS_VERSION       1.18.100.1
 ENV SGX_SDK_VERSION             ${SGX_SDK_PKGS_VERSION}-focal1
 ENV SGX_DCAP_VERSION            ${SGX_DCAP_PKGS_VERSION}-focal1
 ENV RUST_TOOLCHAIN              nightly-2022-10-22
 ENV OS_NAME                     ubuntu
 ENV BINUTILS_DIST               ubuntu20.04
+ENV TOOLSET_DIST                ubuntu20.04
 ENV SGX_SDK_URL                 
"https://download.01.org/intel-sgx/sgx-linux/${SGX_SDK_CODE_VERSION}/distro/${BINUTILS_DIST}-server/sgx_linux_x64_sdk_${SGX_SDK_BIN_VERSION}.bin";
 
 ENV LD_LIBRARY_PATH=/usr/lib:/usr/local/lib
diff --git a/tools/docker/Dockerfile.ubuntu18.04 
b/tools/docker/Dockerfile.ubuntu22.04
similarity index 83%
copy from tools/docker/Dockerfile.ubuntu18.04
copy to tools/docker/Dockerfile.ubuntu22.04
index 4c22b188..9cedb924 100644
--- a/tools/docker/Dockerfile.ubuntu18.04
+++ b/tools/docker/Dockerfile.ubuntu22.04
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-FROM ubuntu:18.04
+FROM ubuntu:22.04
 
 LABEL authors="The Teaclave Authors"
 
@@ -50,7 +50,6 @@ RUN apt-get update && DEBIAN_FRONTEND="noninteractive" 
apt-get install -y --no-i
         libfuse-dev \
         libjsoncpp-dev \
         liblog4cpp5-dev \
-        libprotobuf-c0-dev \
         libprotobuf-dev \
         libssl-dev \
         libtool \
@@ -77,19 +76,20 @@ RUN apt-get update && DEBIAN_FRONTEND="noninteractive" 
apt-get install -y --no-i
     apt-get clean && \
     rm -rf /var/lib/apt/lists/*
 
-ENV CODENAME                    bionic
-ENV SGX_SDK_RELEASE_VERSION     2.20
-ENV SGX_DCAP_RELEASE_VERSION    1.17
-ENV SGX_SDK_CODE_VERSION        2.20
-ENV SGX_DCAP_CODE_VERSION       1.17
-ENV SGX_SDK_BIN_VERSION         2.20.100.4
-ENV SGX_SDK_PKGS_VERSION        2.20.100.4
-ENV SGX_DCAP_PKGS_VERSION       1.17.100.4
-ENV SGX_SDK_VERSION             ${SGX_SDK_PKGS_VERSION}-bionic1
-ENV SGX_DCAP_VERSION            ${SGX_DCAP_PKGS_VERSION}-bionic1
+ENV CODENAME                    jammy
+ENV SGX_SDK_RELEASE_VERSION     2.21
+ENV SGX_DCAP_RELEASE_VERSION    1.18
+ENV SGX_SDK_CODE_VERSION        2.21
+ENV SGX_DCAP_CODE_VERSION       1.18
+ENV SGX_SDK_BIN_VERSION         2.21.100.1
+ENV SGX_SDK_PKGS_VERSION        2.21.100.1
+ENV SGX_DCAP_PKGS_VERSION       1.18.100.1
+ENV SGX_SDK_VERSION             ${SGX_SDK_PKGS_VERSION}-jammy1
+ENV SGX_DCAP_VERSION            ${SGX_DCAP_PKGS_VERSION}-jammy1
 ENV RUST_TOOLCHAIN              nightly-2022-10-22
 ENV OS_NAME                     ubuntu
-ENV BINUTILS_DIST               ubuntu18.04
+ENV BINUTILS_DIST               ubuntu22.04
+ENV TOOLSET_DIST                ubuntu20.04
 ENV SGX_SDK_URL                 
"https://download.01.org/intel-sgx/sgx-linux/${SGX_SDK_CODE_VERSION}/distro/${BINUTILS_DIST}-server/sgx_linux_x64_sdk_${SGX_SDK_BIN_VERSION}.bin";
 
 ENV LD_LIBRARY_PATH=/usr/lib:/usr/local/lib


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to