Make sure FAFT modifies correct file systems

This change reverts the previous change (08644be) and fixes the bug
the previous change blocked.

In case FAFT uses remote servo, the code modifying the USB file
systems in various tests must run on the servo host, not on the host
running autotest.

BUG=chrome-os-partner:38580
TEST=manual

  . the following test now passes (used to fail when running with
    remote servo):

   $ run_remote_tests.sh --use-emerged --board=link --remote=172.22.50.91 \
       firmware_InvalidUSB --args='servo_host=172.22.50.189'

Change-Id: Ie0d6fda760284472adaa9954c80ab4dd6582235c
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42604
diff --git a/server/cros/faftsequence.py b/server/cros/faftsequence.py
index 09e8958..073eb4a 100644
--- a/server/cros/faftsequence.py
+++ b/server/cros/faftsequence.py
@@ -1262,7 +1262,26 @@
         Raises:
           error.TestError: if failed to change magic.
         """
-        raise error.TestError("FAFTSequence._modify_usb_kernel() is unsafe")
+        assert len(from_magic) == 8
+        assert len(to_magic) == 8
+        # USB image only contains one kernel.
+        kernel_part = self._join_part(usb_dev, self.KERNEL_MAP['a'])
+        read_cmd = "sudo dd if=%s bs=8 count=1 2>/dev/null" % kernel_part
+        current_magic = self.servo.system_output(read_cmd)
+        if current_magic == to_magic:
+            logging.info("The kernel magic is already %s.", current_magic)
+            return
+        if current_magic != from_magic:
+            raise error.TestError("Invalid kernel image on USB: wrong magic.")
+
+        logging.info('Modify the kernel magic in USB, from %s to %s.',
+                     from_magic, to_magic)
+        write_cmd = ("echo -n '%s' | sudo dd of=%s oflag=sync conv=notrunc "
+                     " 2>/dev/null" % (to_magic, kernel_part))
+        self.servo.system(write_cmd)
+
+        if self.servo.system_output(read_cmd) != to_magic:
+            raise error.TestError("Failed to write new magic.")
 
 
     def corrupt_usb_kernel(self, usb_dev):