Hi,
I am testing libclamav on a FreeBSD RELENG_4 host and am seeing very odd
behaviour with the library. Once scanning is completed and the trie is freed, a
call to exit(3) causes a segmentation violation.
Using this source which does nothing except call libclamav functions:
int main (int ac, char **av) {
int rc;
char *virus;
struct cl_node *root = NULL;
struct cl_limits limits;
/* Load clamav databases */
if ((rc = cl_loaddbdir(cl_retdbdir(), &root, NULL)) != 0) {
printf("Unable to load virus definitions: %s", cl_perror(rc));
exit(EX_SOFTWARE);
}
/* Create trie */
cl_buildtrie(root);
/* Scan the file */
limits.maxfiles = 100;
limits.maxfilesize = 50 * 1048756;
limits.maxreclevel = 16;
rc = cl_scanfile(av[1], &virus, NULL, root, &limits, CL_ARCHIVE);
/* Report results to log and client */
switch (rc) {
case CL_CLEAN:
printf("2 No infection found.\r\n");
break;
case CL_VIRUS:
printf("5 Infection found [%s].\r\n", virus);
break;
default:
printf("4 Scanning error. See server logs.\r\n", cl_perror(rc));
break;
}
/* Release the trie */
cl_freetrie(root);
exit(EX_OK);
}
and compiling with:
gcc -g -Wall -I/usr/local/include -L/usr/local/lib -o clscan clscan.c -lclamav
causes a segfault:
[EMAIL PROTECTED]:[clscan] (140) # ./clscan ~ollie/eicar.com
5 Infection found [Eicar-Test-Signature].
Segmentation fault (core dumped)
The backtrace is not very revealing I'm afraid:
(gdb) bt
#0 0x280f7da4 in .cerror () from /usr/lib/libc.so.4
#1 0x2818ccbf in _exit () from /usr/lib/libc_r.so.4
#2 0x280f7ca3 in exit () from /usr/lib/libc.so.4
#3 0x8048755 in main (ac=1, av=0xbfbffac0) at clscan.c:56
The compiler generates the following warnings during compilation, but I don't
think they're necessarily anything to worry about:
/usr/lib/libc_r.so.4: WARNING! setkey(3) not present in the system!
/usr/lib/libc_r.so.4: warning: this program uses gets(), which is unsafe.
/usr/lib/libc_r.so.4: warning: mktemp() possibly used unsafely; consider using
mkstemp()
/usr/lib/libc_r.so.4: WARNING! des_setkey(3) not present in the system!
/usr/lib/libc_r.so.4: WARNING! encrypt(3) not present in the system!
/usr/lib/libc_r.so.4: warning: tmpnam() possibly used unsafely; consider using
mkstemp()
/usr/lib/libc_r.so.4: warning: this program uses f_prealloc(), which is not
recommended.
/usr/lib/libc_r.so.4: WARNING! des_cipher(3) not present in the system!
/usr/lib/libc_r.so.4: warning: tempnam() possibly used unsafely; consider using
mkstemp()
I'm a bit confused as to why the segfault might be occurring during exit(3).
Has anyone else seen this behaviour before? The host is running FreeBSD
4.9-PRERELEASE and I have reproduced the problem with the same code on FreeBSD
4.5-RELEASE. They are both running clamav-0.60.
Any pointers on how to track down this problem would be gratefully received (or
indeed a pointer to my own mistake!).
Thanks.
Yours,
Ollie
--
Oliver Cook Systems Administrator, Claranet UK
[EMAIL PROTECTED] 020 7903 3065
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Clamav-users mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/clamav-users