The setexpr command used to segfault when accessing memory in sandbox.
The pointer accesses should be mapped.

Signed-off-by: Joe Hershberger <joe.hershber...@ni.com>
Cc: Simon Glass <s...@chromium.org>
---

 common/cmd_setexpr.c | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/common/cmd_setexpr.c b/common/cmd_setexpr.c
index 926339b..e7194fc 100644
--- a/common/cmd_setexpr.c
+++ b/common/cmd_setexpr.c
@@ -12,23 +12,37 @@
 #include <common.h>
 #include <config.h>
 #include <command.h>
+#include <mapmem.h>
 
 static ulong get_arg(char *s, int w)
 {
-       ulong *p;
-
        /*
-        * if the parameter starts with a '*' then assume
-        * it is a pointer to the value we want
+        * If the parameter starts with a '*' then assume it is a pointer to
+        * the value we want.
         */
-
        if (s[0] == '*') {
-               p = (ulong *)simple_strtoul(&s[1], NULL, 16);
+               ulong *p;
+               ulong addr;
+               ulong val;
+
+               addr = simple_strtoul(&s[1], NULL, 16);
                switch (w) {
-               case 1: return((ulong)(*(uchar *)p));
-               case 2: return((ulong)(*(ushort *)p));
+               case 1:
+                       p = map_sysmem(addr, sizeof(uchar));
+                       val = (ulong)*(uchar *)p;
+                       unmap_sysmem(p);
+                       return val;
+               case 2:
+                       p = map_sysmem(addr, sizeof(ushort));
+                       val = (ulong)*(ushort *)p;
+                       unmap_sysmem(p);
+                       return val;
                case 4:
-               default: return(*p);
+               default:
+                       p = map_sysmem(addr, sizeof(ulong));
+                       val = *p;
+                       unmap_sysmem(p);
+                       return val;
                }
        } else {
                return simple_strtoul(s, NULL, 16);
-- 
1.7.11.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to