From: Luben Tuikov <luben.tuikov@amd.com>
To: <amd-gfx@lists.freedesktop.org>
Cc: Alex Deucher <Alexander.Deucher@amd.com>,
Tom StDenis <tom.stdenis@amd.com>,
Luben Tuikov <luben.tuikov@amd.com>
Subject: [PATCH v1 2/4] umr: Fix ring-stream segmentation fault
Date: Fri, 11 Mar 2022 19:52:04 -0500 [thread overview]
Message-ID: <20220312005206.26588-2-luben.tuikov@amd.com> (raw)
In-Reply-To: <20220312005206.26588-1-luben.tuikov@amd.com>
Fix a segmentation fault when running --ring-stream for a ring and no
bounds are specified. For instance "umr --ring-stream sdma0" on Sienna
Cichlid, generates the following segmentation fault:
Core was generated by `umr --ring-stream sdma0'.
Program terminated with signal SIGSEGV, Segmentation fault.
0 umr_sdma_decode_ring (asic=0x86cff0, ringname=0x7ffe92844ae0 "sdma0", start=1484, stop=10000) at /home/ltuikov/proj/open/umr/src/lib/read_sdma_stream.c:68
68 lineardata[linearsize++] = ringdata[3 + start]; // first 3 words are rptr/wptr/dwptr
Missing separate debuginfos, use: dnf debuginfo-install SDL2-2.0.14-1.fc33.x86_64 glibc-2.32-10.fc33.x86_64 libedit-3.1-38.20210714cvs.fc33.x86_64 libffi-3.1-26.fc33.x86_64 libgcc-10.3.1-1.fc33.x86_64 libpciaccess-0.16-3.fc33.x86_64 libstdc++-10.3.1-1.fc33.x86_64 llvm-libs-11.0.0-1.fc33.x86_64 nanomsg-1.1.5-6.fc33.x86_64 ncurses-libs-6.2-3.20200222.fc33.x86_64 zlib-1.2.11-23.fc33.x86_64
(gdb) bt
0 umr_sdma_decode_ring (asic=0x86cff0, ringname=0x7ffe92844ae0 "sdma0", start=1484, stop=10000) at /home/ltuikov/proj/open/umr/src/lib/read_sdma_stream.c:68
1 0x0000000000473b71 in present_sdma (asic=0x86cff0, ringname=0x7ffe92844ae0 "sdma0", start=0, end=10000, vmid=4294967295, addr=139867074238864, nwords=0)
at /home/ltuikov/proj/open/umr/src/app/ring_stream_read.c:1214
2 0x00000000004740c9 in umr_read_ring_stream (asic=0x86cff0, ringpath=0x7ffe92847190 "sdma0") at /home/ltuikov/proj/open/umr/src/app/ring_stream_read.c:1325
3 0x0000000000457567 in main (argc=3, argv=0x7ffe92845268) at /home/ltuikov/proj/open/umr/src/app/main.c:473
(gdb) l
63
64 // copy ring data into linear array
65 lineardata = calloc(ringsize, sizeof(*lineardata));
66 linearsize = 0;
67 while (start != stop) {
68 lineardata[linearsize++] = ringdata[3 + start]; // first 3 words are rptr/wptr/dwptr
69 start = (start + 1) % ringsize;
70 }
71
72 ps = umr_sdma_decode_stream(asic, -1, 0, 0, lineardata, linearsize);
(gdb) p ringsize
$1 = 2048
(gdb) p linearsize
$2 = 30157
(gdb)
Where "linearsize" of 30157 is clearly out of bounds of "lineardata."
Cc: Alex Deucher <Alexander.Deucher@amd.com>
Cc: Tom StDenis <tom.stdenis@amd.com>
Signed-off-by: Luben Tuikov <luben.tuikov@amd.com>
Reviewed-by: Tom StDenis <tom.stdenis@amd.com>
---
src/lib/read_sdma_stream.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/lib/read_sdma_stream.c b/src/lib/read_sdma_stream.c
index 63c4fc284afa17..863d251ef64a63 100644
--- a/src/lib/read_sdma_stream.c
+++ b/src/lib/read_sdma_stream.c
@@ -63,11 +63,10 @@ struct umr_sdma_stream *umr_sdma_decode_ring(struct umr_asic *asic, char *ringna
// copy ring data into linear array
lineardata = calloc(ringsize, sizeof(*lineardata));
- linearsize = 0;
- while (start != stop) {
- lineardata[linearsize++] = ringdata[3 + start]; // first 3 words are rptr/wptr/dwptr
- start = (start + 1) % ringsize;
- }
+ for (linearsize = 0;
+ start != stop && linearsize < ringsize;
+ linearsize++, start = (start + 1) % ringsize)
+ lineardata[linearsize] = ringdata[3 + start]; // first 3 words are rptr/wptr/dwptr
ps = umr_sdma_decode_stream(asic, -1, 0, 0, lineardata, linearsize);
free(lineardata);
--
2.35.1.291.gdab1b7905d
next prev parent reply other threads:[~2022-03-12 0:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-12 0:52 [PATCH v1 1/4] umr: Print errors to stderr Luben Tuikov
2022-03-12 0:52 ` Luben Tuikov [this message]
2022-03-12 0:52 ` [PATCH v1 3/4] umr: Consistent indentation in switch Luben Tuikov
2022-03-12 0:52 ` [PATCH v1 4/4] umr: Fix unhandled enumeration value " Luben Tuikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220312005206.26588-2-luben.tuikov@amd.com \
--to=luben.tuikov@amd.com \
--cc=Alexander.Deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=tom.stdenis@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.