Re: [git pull] kgdb light, v5




* Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:

+static int kgdb_get_mem(char *addr, unsigned char *buf, int count)
{
+ if ((unsigned long)addr < TASK_SIZE)
+ return -EFAULT;

+ return probe_kernel_read(buf, addr, count);
}

Ok, so this is a pretty function after all the cleanups, but I
actually don't think that "if ((unsigned long)addr < TASK_SIZE)" is
really even asked for.

Why not let kgdb look at user memory? I'd argue that in a lot of
cases, it might be quite nice to do, to see what user arguments in
memory are etc etc (think things like futexes, where user memory
contents really do matter).

So I'd suggest getting rid of the whole "kgdb_{get|set}_mem()"
functions, and just using "probe_kernel_{read|write}()" directly
instead.

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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: Phillips TV does not hold default channel
    ... and not through the decoder box (dish box). ... the default user memory will be re-set to the default. ... And with so little to watch, I usually only watch the PBS channel anyway. ...
    (sci.electronics.repair)
  • Re: Phillips TV does not hold default channel
    ... and not through the decoder box (dish box). ... the default user memory will be re-set to the default. ... And with so little to watch, I usually only watch the PBS channel anyway. ...
    (sci.electronics.repair)
  • Re: Garmin Quest 2 - All of North America Built In? How is this possible?
    ... POIs? ... I guess that's what the user memory could be used for. ... Of course if you're going on short trips or repeated trips to the same ...
    (sci.geo.satellite-nav)
  • get_user_pages() still broken in 2.6
    ... Function get_user_pagesis supposed to lock user memory. ... Calls our driver, which issues a get_user_pagescall for one page. ...
    (Linux-Kernel)
  • Re: FreeBSD 5.5 persistent crashing
    ... We have so far tried replacing the memory in the ... server and we are still experiencing the crashes. ... If anyone has any ideas as to what could be causing this, or possible kgdb ... #12 0xc0601e4f in syscall (frame= ...
    (freebsd-hackers)