mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/debug: fix page-overflow bug in dbg_rw_guest_mem
When using gdbsx dbg_rw_guest_mem is used to read/write guest memory. When the buffer being accessed is on a page-boundary, the next page needs to be grabbed to access the correct memory for the buffer's overflown parts. While dbg_rw_guest_mem has logic to handle that, it broke with229492e210. Instead of grabbing the next page the code right now is looping back to the start of the first page. This results in errors like the following while trying to use gdb with Linux' lx-dmesg: [ 0.114457] PM: hibernation: Registered nosave memory: [mem 0xfdfff000-0xffffffff] [ 0.114460] [mem 0x90000000-0xfbffffff] available for PCI demem 0 [ 0.114462] f]f] Python Exception <class 'ValueError'> embedded null character: Error occurred in Python: embedded null character Fixing this bug by taking the variable assignment outside the loop. Fixes:229492e210("x86/debugger: use copy_to/from_guest() in dbg_rw_guest_mem()") Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
a48066d25c
commit
9dc687f155
1 file changed
+2
-1
@@ -112,10 +112,11 @@ static unsigned int dbg_rw_guest_mem(struct domain *dp, void * __user gaddr,
|
||||
void * __user buf, unsigned int len,
|
||||
bool toaddr, uint64_t pgd3)
|
||||
{
|
||||
unsigned long addr = (unsigned long)gaddr;
|
||||
|
||||
while ( len > 0 )
|
||||
{
|
||||
char *va;
|
||||
unsigned long addr = (unsigned long)gaddr;
|
||||
mfn_t mfn;
|
||||
gfn_t gfn = INVALID_GFN;
|
||||
unsigned long pagecnt;
|
||||
|
||||