[R] Stack smashing again, redux.
Ivan Krylov
kry|ov@r00t @end|ng |rom gm@||@com
Mon Apr 11 12:00:21 CEST 2022
Depending on one's dislike for different approaches, it's possible to
use AddressSanitizer with R in at least three different ways, probably
more. There's the Rocker project providing Docker images of R already
built with sanitizer support [1] (but then you have to install Docker),
there's compiling R from source with -fsanitize=address in CFLAGS,
FFLAGS, MAIN_LDFLAGS [2] (but then you have to compile R from source)
and there's the partially manual way I've mentioned before (which
involves modifying one's global configuration files and reverting the
changes later):
1. Temporarily add the following to ~/.R/Makevars:
FFLAGS=-g -Og -fsanitize=address
FCFLAGS=-g -Og -fsanitize=address
2. Compile the shared object using:
R CMD SHLIB -o hah.so *.f -fsanitize=address
3. Run R as follows:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 R
With AddressSanitizer, I get the following stack buffer overflow error
message:
> xxx <- get.gl(theta.new,sigma,X,y,cf,state,"Dbd",size,nbot,ntop)
=================================================================
==716==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffea5d32458 at pc 0x7f282c38498d bp 0x7ffea5d32
000 sp 0x7ffea5d31ff8
WRITE of size 8 at 0x7ffea5d32458 thread T0
#0 0x7f282c38498c in derivfdbd_ /home/ivan/derivfdbd.f:16
#1 0x7f282c3852d6 in derivf_ /home/ivan/derivf.f:17
#2 0x7f282c385dd3 in getgl_ /home/ivan/getgl.f:19
#3 0x7f282c4e5eec in do_dotCode src/main/dotcode.c:1994
(skipping unrelated stack frames)
Address 0x7ffea5d32458 is located in stack of thread T0 at offset 312 in frame
#0 0x7f282c385a6f in getgl_ /home/ivan/getgl.f:2
This frame has 7 object(s):
[32, 36) 'nd'
[96, 104) 'd2aa'
[160, 168) 'd2ab'
[224, 232) 'd2bb'
[288, 296) 'd2f' <== Memory access at offset 312 overflows this variable
[352, 360) 'd2u'
[416, 424) 'd2zeta'
(skipping more unnecessary information)
Adding "dimension d2f(kstate,npar,npar)" to getgl.f seems to prevent
this or any other error from happening, though I can't judge the
calculation results; they could indicate some other problem with memory
management.
--
Best regards,
Ivan
[1] https://www.rocker-project.org/images/#additional-images
[2]
https://cran.r-project.org/doc/manuals/R-exts.html#Using-Address-Sanitizer
More information about the R-help
mailing list