Message ID | 1313378548-15742-1-git-send-email-amdragon@mit.edu |
---|---|
State | New |
Headers | show |
Thanks, applied. On Mon, Aug 15, 2011 at 3:22 AM, Austin Clements <amdragon@mit.edu> wrote: > Previously, "info mem" considered and displayed only the last-level > protection bits for a memory range, which doesn't accurrately > represent the protection of that range. Now it shows the combined > protection. > > Signed-off-by: Austin Clements <amdragon@mit.edu> > --- > monitor.c | 10 +++++++--- > 1 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/monitor.c b/monitor.c > index f8ba0ef..cd4e749 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -2246,7 +2246,8 @@ static void mem_info_32(Monitor *mon, CPUState *env) > pte = le32_to_cpu(pte); > end = (l1 << 22) + (l2 << 12); > if (pte & PG_PRESENT_MASK) { > - prot = pte & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); > + prot = pte & pde & > + (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); > } else { > prot = 0; > } > @@ -2295,8 +2296,8 @@ static void mem_info_pae32(Monitor *mon, CPUState *env) > pte = le64_to_cpu(pte); > end = (l1 << 30) + (l2 << 21) + (l3 << 12); > if (pte & PG_PRESENT_MASK) { > - prot = pte & (PG_USER_MASK | PG_RW_MASK | > - PG_PRESENT_MASK); > + prot = pte & pde & (PG_USER_MASK | PG_RW_MASK | > + PG_PRESENT_MASK); > } else { > prot = 0; > } > @@ -2343,6 +2344,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) > if (pdpe & PG_PSE_MASK) { > prot = pdpe & (PG_USER_MASK | PG_RW_MASK | > PG_PRESENT_MASK); > + prot &= pml4e; > mem_print(mon, &start, &last_prot, end, prot); > } else { > pd_addr = pdpe & 0x3fffffffff000ULL; > @@ -2354,6 +2356,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) > if (pde & PG_PSE_MASK) { > prot = pde & (PG_USER_MASK | PG_RW_MASK | > PG_PRESENT_MASK); > + prot &= pml4e & pdpe; > mem_print(mon, &start, &last_prot, end, prot); > } else { > pt_addr = pde & 0x3fffffffff000ULL; > @@ -2367,6 +2370,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) > if (pte & PG_PRESENT_MASK) { > prot = pte & (PG_USER_MASK | PG_RW_MASK | > PG_PRESENT_MASK); > + prot &= pml4e & pdpe & pde; > } else { > prot = 0; > } > -- > 1.7.5.4 > > >
diff --git a/monitor.c b/monitor.c index f8ba0ef..cd4e749 100644 --- a/monitor.c +++ b/monitor.c @@ -2246,7 +2246,8 @@ static void mem_info_32(Monitor *mon, CPUState *env) pte = le32_to_cpu(pte); end = (l1 << 22) + (l2 << 12); if (pte & PG_PRESENT_MASK) { - prot = pte & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot = pte & pde & + (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); } else { prot = 0; } @@ -2295,8 +2296,8 @@ static void mem_info_pae32(Monitor *mon, CPUState *env) pte = le64_to_cpu(pte); end = (l1 << 30) + (l2 << 21) + (l3 << 12); if (pte & PG_PRESENT_MASK) { - prot = pte & (PG_USER_MASK | PG_RW_MASK | - PG_PRESENT_MASK); + prot = pte & pde & (PG_USER_MASK | PG_RW_MASK | + PG_PRESENT_MASK); } else { prot = 0; } @@ -2343,6 +2344,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) if (pdpe & PG_PSE_MASK) { prot = pdpe & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot &= pml4e; mem_print(mon, &start, &last_prot, end, prot); } else { pd_addr = pdpe & 0x3fffffffff000ULL; @@ -2354,6 +2356,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) if (pde & PG_PSE_MASK) { prot = pde & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot &= pml4e & pdpe; mem_print(mon, &start, &last_prot, end, prot); } else { pt_addr = pde & 0x3fffffffff000ULL; @@ -2367,6 +2370,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) if (pte & PG_PRESENT_MASK) { prot = pte & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot &= pml4e & pdpe & pde; } else { prot = 0; }
Previously, "info mem" considered and displayed only the last-level protection bits for a memory range, which doesn't accurrately represent the protection of that range. Now it shows the combined protection. Signed-off-by: Austin Clements <amdragon@mit.edu> --- monitor.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)