diff --git a/byte_buffer.h b/byte_buffer.h
index 2fdff62..1d79b6d 100644
--- a/byte_buffer.h
+++ b/byte_buffer.h
@@ -32,7 +32,7 @@
 // memory allocation.
 //
 // Usage could be as follows:
-//     const auto& buffer = ByteBuffer<1024>()
+//     const auto buffer = ByteBuffer<1024>()
 //         .AppendOrDie(header.data(), header.size())
 //         .AppendOrDie(body.data(), body.size());
 //     write(fd, buffer.data(), buffer.size());
diff --git a/command_processor.cpp b/command_processor.cpp
index b969bb4..ea223af 100644
--- a/command_processor.cpp
+++ b/command_processor.cpp
@@ -186,12 +186,12 @@
   }
   CHECK(current_log_buffer_.CanFitNow(total_size));
 
-  const auto& tstamp_header =
+  const auto tstamp_header =
       TimestampHeader()
           .set_since_boot_awake_only(os_->GetTimestamp(CLOCK_MONOTONIC))
           .set_since_boot_with_sleep(os_->GetTimestamp(CLOCK_BOOTTIME))
           .set_since_epoch(os_->GetTimestamp(CLOCK_REALTIME));
-  const auto& message_buf =
+  const auto message_buf =
       ByteBuffer<sizeof(TimestampHeader) + protocol::kMaxMessageSize>()
           .AppendOrDie(&tstamp_header, sizeof(tstamp_header))
           .AppendOrDie(command_buffer, command_len);
diff --git a/runtests.sh b/runtests.sh
index 9d6701a..7fae183 100755
--- a/runtests.sh
+++ b/runtests.sh
@@ -30,9 +30,21 @@
 
 set -x # print commands
 
+adb wait-for-device
 adb root
 adb wait-for-device
-adb remount
+
+# 'disable-verity' will appear in 'adb remount' output if
+# dm-verity is enabled and needs to be disabled.
+if adb remount | grep 'disable-verity'; then
+  adb disable-verity
+  adb reboot
+  adb wait-for-device
+  adb root
+  adb wait-for-device
+  adb remount
+fi
+
 adb sync
 
 adb shell /data/nativetest/wifilogd_unit_test/wifilogd_unit_test
diff --git a/tests/command_processor_unittest.cpp b/tests/command_processor_unittest.cpp
index ede5cb0..50b6e78 100644
--- a/tests/command_processor_unittest.cpp
+++ b/tests/command_processor_unittest.cpp
@@ -88,7 +88,7 @@
         tag.length() + ascii_message_tag_len_adjustment;
     const size_t adjusted_data_len =
         message.length() + ascii_message_data_len_adjustment;
-    const auto& ascii_message_header =
+    const auto ascii_message_header =
         protocol::AsciiMessage()
             .set_tag_len(SAFELY_CLAMP(
                 adjusted_tag_len, uint8_t, 0,
@@ -103,7 +103,7 @@
     const size_t payload_len = sizeof(ascii_message_header) + tag.length() +
                                message.length() +
                                command_payload_len_adjustment;
-    const auto& command =
+    const auto command =
         protocol::Command()
             .set_opcode(protocol::Opcode::kWriteAsciiMessage)
             .set_payload_len(SAFELY_CLAMP(
@@ -143,10 +143,10 @@
   }
 
   bool SendDumpBuffers() {
-    const auto& command = protocol::Command()
-                              .set_opcode(protocol::Opcode::kDumpBuffers)
-                              .set_payload_len(0);
-    const auto& buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
+    const auto command = protocol::Command()
+                             .set_opcode(protocol::Opcode::kDumpBuffers)
+                             .set_payload_len(0);
+    const auto buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
     constexpr int kFakeFd = 100;
     return command_processor_->ProcessCommand(buf.data(), buf.size(), kFakeFd);
   }
@@ -220,12 +220,12 @@
   using opcode_integral_t = std::underlying_type<opcode_enum_t>::type;
   constexpr auto invalid_opcode = GetMaxVal<opcode_integral_t>();
 
-  const auto& command =
+  const auto command =
       protocol::Command()
           .set_opcode(local_utils::CopyFromBufferOrDie<opcode_enum_t>(
               &invalid_opcode, sizeof(invalid_opcode)))
           .set_payload_len(0);
-  const auto& buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
+  const auto buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
   constexpr int kFakeFd = 100;
   EXPECT_FALSE(
       command_processor_->ProcessCommand(buf.data(), buf.size(), kFakeFd));
diff --git a/tests/protocol_unittest.cpp b/tests/protocol_unittest.cpp
index 76de58b..abbd86b 100644
--- a/tests/protocol_unittest.cpp
+++ b/tests/protocol_unittest.cpp
@@ -33,6 +33,27 @@
 //     2. We need to maintain compatibility with older clients talking to
 //        newer versions of wifilogd.
 
+TEST(ProtocolTest, AsciiMessageChainingWorks) {
+  using protocol::AsciiMessage;
+  uint8_t tagLen = 3;
+  uint16_t dataLen = 7;
+  const auto ascii_message_header =
+      AsciiMessage().set_tag_len(tagLen).set_data_len(dataLen);
+  EXPECT_EQ(tagLen, ascii_message_header.tag_len);
+  EXPECT_EQ(dataLen, ascii_message_header.data_len);
+}
+
+TEST(ProtocolTest, AsciiMessageNonChainingWorks) {
+  using protocol::AsciiMessage;
+  uint8_t tagLen = 3;
+  uint16_t dataLen = 7;
+  AsciiMessage ascii_message_header = AsciiMessage();
+  ascii_message_header.set_tag_len(tagLen);
+  ascii_message_header.set_data_len(dataLen);
+  EXPECT_EQ(tagLen, ascii_message_header.tag_len);
+  EXPECT_EQ(dataLen, ascii_message_header.data_len);
+}
+
 TEST(ProtocolTest, AsciiMessageLayoutIsUnchanged) {
   using protocol::AsciiMessage;
   ASSERT_TRUE(std::is_standard_layout<AsciiMessage>::value);
