Merge changes I8557b04c,I31610911 into main

* changes:
  libfdt: Add FdtNode::subnodes()
  libfdt: Refactor to keep iterators in one place
diff --git a/rialto/Android.bp b/rialto/Android.bp
index bc08d8c..326f6fc 100644
--- a/rialto/Android.bp
+++ b/rialto/Android.bp
@@ -13,7 +13,6 @@
         "libbssl_ffi_nostd",
         "libciborium_io_nostd",
         "libciborium_nostd",
-        "libcoset_nostd",
         "libdiced_open_dice_nostd",
         "libdiced_sample_inputs_nostd",
         "libhyp",
@@ -21,10 +20,10 @@
         "liblibfdt",
         "liblog_rust_nostd",
         "libservice_vm_comm_nostd",
+        "libservice_vm_requests_nostd",
         "libtinyvec_nostd",
         "libvirtio_drivers",
         "libvmbase",
-        "libzeroize_nostd",
     ],
 }
 
diff --git a/rialto/src/main.rs b/rialto/src/main.rs
index 43215a0..d9cffe0 100644
--- a/rialto/src/main.rs
+++ b/rialto/src/main.rs
@@ -21,7 +21,6 @@
 mod error;
 mod exceptions;
 mod fdt;
-mod requests;
 
 extern crate alloc;
 
@@ -39,6 +38,7 @@
 use libfdt::FdtError;
 use log::{debug, error, info};
 use service_vm_comm::{ServiceVmRequest, VmType};
+use service_vm_requests::process_request;
 use virtio_drivers::{
     device::socket::{VsockAddr, VMADDR_CID_HOST},
     transport::{pci::bus::PciRoot, DeviceType, Transport},
@@ -178,7 +178,7 @@
 
     let mut vsock_stream = VsockStream::new(socket_device, host_addr())?;
     while let ServiceVmRequest::Process(req) = vsock_stream.read_request()? {
-        let response = requests::process_request(req, bcc_handover.as_ref())?;
+        let response = process_request(req, bcc_handover.as_ref());
         vsock_stream.write_response(&response)?;
         vsock_stream.flush()?;
     }
diff --git a/service_vm/requests/Android.bp b/service_vm/requests/Android.bp
new file mode 100644
index 0000000..4b9b46f
--- /dev/null
+++ b/service_vm/requests/Android.bp
@@ -0,0 +1,34 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+rust_defaults {
+    name: "libservice_vm_requests_defaults",
+    crate_name: "service_vm_requests",
+    defaults: ["avf_build_flags_rust"],
+    srcs: ["src/lib.rs"],
+    prefer_rlib: true,
+    apex_available: [
+        "com.android.virt",
+    ],
+}
+
+rust_library_rlib {
+    name: "libservice_vm_requests_nostd",
+    defaults: ["libservice_vm_requests_defaults"],
+    no_stdlibs: true,
+    stdlibs: [
+        "libcore.rust_sysroot",
+    ],
+    rustlibs: [
+        "libbssl_avf_error_nostd",
+        "libbssl_avf_nostd",
+        "libciborium_nostd",
+        "libcoset_nostd",
+        "libdiced_open_dice_nostd",
+        "liblog_rust_nostd",
+        "libserde_nostd",
+        "libservice_vm_comm_nostd",
+        "libzeroize_nostd",
+    ],
+}
diff --git a/rialto/src/requests/api.rs b/service_vm/requests/src/api.rs
similarity index 91%
rename from rialto/src/requests/api.rs
rename to service_vm/requests/src/api.rs
index 59a7aed..eae0370 100644
--- a/rialto/src/requests/api.rs
+++ b/service_vm/requests/src/api.rs
@@ -14,8 +14,7 @@
 
 //! This module contains the main API for the request processing module.
 
-use super::rkp;
-use crate::error::Result;
+use crate::rkp;
 use alloc::vec::Vec;
 use diced_open_dice::DiceArtifacts;
 use service_vm_comm::{Request, Response};
@@ -23,8 +22,8 @@
 /// Processes a request and returns the corresponding response.
 /// This function serves as the entry point for the request processing
 /// module.
-pub fn process_request(request: Request, dice_artifacts: &dyn DiceArtifacts) -> Result<Response> {
-    let response = match request {
+pub fn process_request(request: Request, dice_artifacts: &dyn DiceArtifacts) -> Response {
+    match request {
         Request::Reverse(v) => Response::Reverse(reverse(v)),
         Request::GenerateEcdsaP256KeyPair => rkp::generate_ecdsa_p256_key_pair(dice_artifacts)
             .map_or_else(Response::Err, Response::GenerateEcdsaP256KeyPair),
@@ -32,8 +31,7 @@
             rkp::generate_certificate_request(p, dice_artifacts)
                 .map_or_else(Response::Err, Response::GenerateCertificateRequest)
         }
-    };
-    Ok(response)
+    }
 }
 
 fn reverse(payload: Vec<u8>) -> Vec<u8> {
diff --git a/rialto/src/requests.rs b/service_vm/requests/src/lib.rs
similarity index 86%
rename from rialto/src/requests.rs
rename to service_vm/requests/src/lib.rs
index d9e6f37..fc0c87d 100644
--- a/rialto/src/requests.rs
+++ b/service_vm/requests/src/lib.rs
@@ -12,7 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-//! This module contains functions for the request processing.
+//! This library contains functions for the request processing.
+
+#![no_std]
+
+extern crate alloc;
 
 mod api;
 mod pub_key;
diff --git a/rialto/src/requests/pub_key.rs b/service_vm/requests/src/pub_key.rs
similarity index 100%
rename from rialto/src/requests/pub_key.rs
rename to service_vm/requests/src/pub_key.rs
diff --git a/rialto/src/requests/rkp.rs b/service_vm/requests/src/rkp.rs
similarity index 100%
rename from rialto/src/requests/rkp.rs
rename to service_vm/requests/src/rkp.rs