summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1997-11-20 18:24:52 +0000
committerbde <bde@FreeBSD.org>1997-11-20 18:24:52 +0000
commit40314588fdac7b80fa6600cd653032493c4503a3 (patch)
treee84c49d931780f8afbb90f0f9100a91f659d93f6 /sys
parentdfbf1ec5a96e49d821416565e5196af4a3be0882 (diff)
downloadFreeBSD-src-40314588fdac7b80fa6600cd653032493c4503a3.zip
FreeBSD-src-40314588fdac7b80fa6600cd653032493c4503a3.tar.gz
Fixed wrong limits for the kernel text in db_numargs(). The
interval [VM_MIN_KERNEL_ADDRESS, etext] was used instead of [btext, etext). Added a comment about this being completely wrong for LKMs. This only affects interpreting the instructions after the return to attempt decide the number of args. The attempt usually fails anyway.
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/db_trace.c10
-rw-r--r--sys/i386/i386/db_trace.c10
2 files changed, 14 insertions, 6 deletions
diff --git a/sys/amd64/amd64/db_trace.c b/sys/amd64/amd64/db_trace.c
index d4aaaec..7dec82b 100644
--- a/sys/amd64/amd64/db_trace.c
+++ b/sys/amd64/amd64/db_trace.c
@@ -23,7 +23,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: db_trace.c,v 1.25 1997/08/21 06:32:37 charnier Exp $
+ * $Id: db_trace.c,v 1.26 1997/10/27 17:23:18 bde Exp $
*/
#include <sys/param.h>
@@ -97,8 +97,12 @@ db_numargs(fp)
int args;
argp = (int *)db_get_value((int)&fp->f_retaddr, 4, FALSE);
- if (argp < (int *)VM_MIN_KERNEL_ADDRESS ||
- argp > (int *)etext) {
+ /*
+ * XXX etext is wrong for LKMs. We should attempt to interpret
+ * the instruction at the return address in all cases. This
+ * may require better fault handling.
+ */
+ if (argp < (int *)btext || argp >= (int *)etext) {
args = 5;
} else {
inst = db_get_value((int)argp, 4, FALSE);
diff --git a/sys/i386/i386/db_trace.c b/sys/i386/i386/db_trace.c
index d4aaaec..7dec82b 100644
--- a/sys/i386/i386/db_trace.c
+++ b/sys/i386/i386/db_trace.c
@@ -23,7 +23,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: db_trace.c,v 1.25 1997/08/21 06:32:37 charnier Exp $
+ * $Id: db_trace.c,v 1.26 1997/10/27 17:23:18 bde Exp $
*/
#include <sys/param.h>
@@ -97,8 +97,12 @@ db_numargs(fp)
int args;
argp = (int *)db_get_value((int)&fp->f_retaddr, 4, FALSE);
- if (argp < (int *)VM_MIN_KERNEL_ADDRESS ||
- argp > (int *)etext) {
+ /*
+ * XXX etext is wrong for LKMs. We should attempt to interpret
+ * the instruction at the return address in all cases. This
+ * may require better fault handling.
+ */
+ if (argp < (int *)btext || argp >= (int *)etext) {
args = 5;
} else {
inst = db_get_value((int)argp, 4, FALSE);
OpenPOWER on IntegriCloud