Hi,

I found and fixed a segfault in handle_nand_dump_command.

fileio_size() was being called after nand_fileio_finish() which which resets the state of the NAND file I/O structure state, including NULL-ifying the pointer subsequently accessed by fileio_size().

Cheers,

Paul

From 405d96d7d7acb96b0ef9b4b59afd24929671860e Mon Sep 17 00:00:00 2001
From: Paul Richards <paulr...@gmail.com>
Date: Wed, 15 Dec 2010 21:42:03 +0900
Subject: [PATCH] Fix for segfault in handle_nand_dump_command.

---
 src/flash/nand/tcl.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/flash/nand/tcl.c b/src/flash/nand/tcl.c
index 15cf179..af91fc8 100644
--- a/src/flash/nand/tcl.c
+++ b/src/flash/nand/tcl.c
@@ -357,6 +357,7 @@ COMMAND_HANDLER(handle_nand_verify_command)
 
 COMMAND_HANDLER(handle_nand_dump_command)
 {
+       int filesize;
        struct nand_device *nand = NULL;
        struct nand_fileio_state s;
        int retval = CALL_COMMAND_HANDLER(nand_fileio_parse_args,
@@ -386,13 +387,12 @@ COMMAND_HANDLER(handle_nand_dump_command)
                s.address += nand->page_size;
        }
 
+       retval = fileio_size(&s.fileio, &filesize);
+       if (retval != ERROR_OK)
+               return retval;
+
        if (nand_fileio_finish(&s) == ERROR_OK)
        {
-               int filesize;
-               retval = fileio_size(&s.fileio, &filesize);
-               if (retval != ERROR_OK)
-                       return retval;
-
                command_print(CMD_CTX, "dumped %ld bytes in %fs (%0.3f KiB/s)",
                                (long)filesize, duration_elapsed(&s.bench),
                                duration_kbps(&s.bench, filesize));
-- 
1.7.2.3

_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to