ok, on a second thought: kgdb_{get|set}_mem() is _only_ used to validate
and set the software breakpoint (int3). And i think kgdb correctly
restricts that to kernel-space addresses only - you can typo an address
down into user-space and overwrite user-space memory and not know what
hit you ... [you can still explicitly touch user-space memory, but that
has to be done intentionally]
So to reduce the confusion i've removed these functions and open-coded
the probe_kernel_*() functions into kgdb_validate_break_address() and
kgdb_arch_set_breakpoint().
all other places already use probe_kernel_{read|write}. (Now, there are
a few stray TASK_SIZE checks still, i'll double check them and convert
them to access_ok() checks.)
btw., based on your previous comment about alignment, i found another
function that used weird alignment checks, kgdb_hex2mem():
if (count == 2 && ((long)mem & 1) == 0)
err = probe_kernel_write(mem, tmp_raw, 2);
else if (count == 4 && ((long)mem & 3) == 0)
err = probe_kernel_write(mem, tmp_raw, 4);
else if (count == 8 && ((long)mem & 7) == 0)
err = probe_kernel_write(mem, tmp_raw, 8);
else
err = probe_kernel_write(mem, tmp_raw, count);
return err;
}
I just converted it to:
return probe_kernel_write(mem, tmp_raw, count);
which looks _a lot_ cleaner.
Ingo
--