Use map_sysmem when accessing memory in setexpr

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

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Joe Hershberger 2015-05-11 13:53:13 -05:00 committed by Tom Rini
parent 9597494ebf
commit 2068cea173

View File

@ -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);