libfdt: Fix subnodes() lifetime

Bug: 318431695
Test: atest liblibfdt.integration_test
Change-Id: Ib0ca4c9eb74918896666544793362acfc372e689
diff --git a/libs/libfdt/src/iterators.rs b/libs/libfdt/src/iterators.rs
index 7406164..e818c68 100644
--- a/libs/libfdt/src/iterators.rs
+++ b/libs/libfdt/src/iterators.rs
@@ -304,7 +304,7 @@
 }
 
 impl<'a> SubnodeIterator<'a> {
-    pub(crate) fn new(node: &'a FdtNode) -> Result<Self, FdtError> {
+    pub(crate) fn new(node: &FdtNode<'a>) -> Result<Self, FdtError> {
         let subnode = node.first_subnode()?;
 
         Ok(Self { subnode })
diff --git a/libs/libfdt/src/lib.rs b/libs/libfdt/src/lib.rs
index d90f5f0..9782dde 100644
--- a/libs/libfdt/src/lib.rs
+++ b/libs/libfdt/src/lib.rs
@@ -468,7 +468,7 @@
     }
 
     /// Returns an iterator of subnodes
-    pub fn subnodes(&'a self) -> Result<SubnodeIterator<'a>> {
+    pub fn subnodes(&self) -> Result<SubnodeIterator<'a>> {
         SubnodeIterator::new(self)
     }
 
diff --git a/libs/libfdt/tests/api_test.rs b/libs/libfdt/tests/api_test.rs
index 08fb8a5..4b1877a 100644
--- a/libs/libfdt/tests/api_test.rs
+++ b/libs/libfdt/tests/api_test.rs
@@ -471,6 +471,28 @@
 
 #[test]
 #[ignore] // Borrow checker test. Compilation success is sufficient.
+fn node_subnodess_lifetime() {
+    let data = fs::read(TEST_TREE_PHANDLE_PATH).unwrap();
+    let fdt = Fdt::from_slice(&data).unwrap();
+
+    let first_subnode_name = {
+        let first_subnode = {
+            let mut subnodes_iter = {
+                let root = fdt.root().unwrap();
+                root.subnodes().unwrap()
+                // Make root to be dropped
+            };
+            subnodes_iter.next().unwrap()
+            // Make subnodess_iter to be dropped
+        };
+        first_subnode.name()
+        // Make first_subnode to be dropped
+    };
+    assert_eq!(Ok(cstr!("node_a")), first_subnode_name);
+}
+
+#[test]
+#[ignore] // Borrow checker test. Compilation success is sufficient.
 fn node_descendants_lifetime() {
     let data = fs::read(TEST_TREE_PHANDLE_PATH).unwrap();
     let fdt = Fdt::from_slice(&data).unwrap();