Hi,

stepped into an infinite loop on freshclam when there's no permissions
for daily.inc and daily.inc/*.

I know the permissions are an install problem but it may happen and the
loop is a major CPU chewer:

root       232  0.0  0.0  1928  652 ?        S     2006   0:46 /usr/sbin/cron
root      4915  0.0  0.0  2040  724 ?        S    13:44   0:00  \_ 
/USR/SBIN/CRON
qscand    4916 73.9  0.0  2892  848 ?        R    13:44 421:12      \_ 
/ptmail/av/bin/freshclam
root      4918  0.0  0.0  1524  300 ?        S    13:44   0:00      \_ 
bin/qmail-inject -a -- root
qmailq    4922  0.0  0.0  1488  288 ?        S    13:44   0:00          \_ 
bin/qmail-queue

Attached is a patch for shared/misc.c that fixes this (haven't tested
it though) and a strace dump of the looping process.

Best regards.

-- 
Jose Celestino
----------------------------------------------------------------
http://www.msversus.org/     ; http://techp.org/petition/show/1
http://www.vinc17.org/noswpat.en.html
----------------------------------------------------------------
"And on the trillionth day, Man created Gods." -- Thomas D. Pate
--- shared/misc-orig.c  2007-02-11 00:35:22.000000000 +0000
+++ shared/misc.c       2007-02-17 01:12:57.000000000 +0000
@@ -212,7 +212,7 @@
                        if(lstat(fname, &statbuf) != -1) {
                            if(S_ISDIR(statbuf.st_mode) && 
!S_ISLNK(statbuf.st_mode)) {
                                if(rmdir(fname) == -1) { /* can't be deleted */
-                                   if(errno == EACCES) {
+                                   if(errno != ENOTEMPTY) {
                                        closedir(dd);
                                        free(fname);
                                        return 1;
@@ -220,7 +220,11 @@
                                    rmdirs(fname);
                                }
                            } else
-                               unlink(fname);
+                               if (unlink(fname) == -1) {
+                                       closedir(dd);
+                                       free(fname);
+                                       return 1;
+                               }
                        }
 
                        free(fname);
12213 write(2, "LibClamAV debug: MD5(.tar.gz) = 
75b8ec178d4e1e534f955bfbce4b19b2\n", 65) = 65
12213 write(2, "LibClamAV debug: cli_versig: Decoded signature: 
75b8ec178d4e1e534f955bfbce4b19b2\n", 81) = 81
12213 write(2, "LibClamAV debug: cli_versig: Digital signature is correct.\n", 
59) = 59
12213 close(6)                          = 0
12213 munmap(0x40094000, 4096)          = 0
12213 open("./clamav-b98155eced458604160ab4d93a9f29a8", O_RDONLY) = 6
12213 fstat64(6, {st_mode=S_IFREG|0644, st_size=796318, ...}) = 0
12213 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
0) = 0x40094000
12213 read(6, "ClamAV-VDB:16 Feb 2007 23-37 
+0000:2583:7951:13:75b8ec178d4e1e534f955bfbce4b19b2:Bbz8athLMAF+5x5nc/EzOvCqK0SKUepHgUr5qZAJnPA5dKkS8DfR79Z2RNlQDN4Oa+pcqAvdoMhYRNuCmAHAzUErR1YDoFBRwqkydyVEW9Mr65rZKxtLyRU2xXMMXxCT6dqEZ5Icpqq/nxhJMqyQon4oPcuZ++hye7PErLgSklg:sven:1171669048
                                                                                
                                                                                
                                                                                
    
\37\213\10\0\0\0\0\0\0\3\354\275k\223\0337\226-:_O\306\375\21\f\177i\253\247\304\311L<2\263<=\23%\251dU\267^VIv\313_\356\0012\221*\216Xd]\222%\271\332\341\377~\327\2\220\17\222Y\262\272\317\235\231\270\21S3n\361\221\00066\366c\355\215\r\360\361\253\327\357/^~\377O\377\231\177)\376\264\224\376\337Tf\373\377\246RdY\372OY\252\264\222\22\17\252\177J3!S\365O\263\364?\225\252\370w\273\335\231\315l\366O\237?\177~\330\230\235\271\357\271\337\373>L&\355\377\375\377\311\337\377\372_3\374}\377\362\335\354\373\363\227\347o\316\236\317^\277{\364\374\342\361\f\377\235\277\274<O\302\3\370\373\321m\266\213\365j\226\237\314\376|\273r\263\254\252\262$\231=^\337\334m\26\37\256v\263o\37?\300\207eu\342\277\232=\33587\273\\\267\273\317f\343fO\327\267+\260\17\35\234\314.V\365<\361}\252j\366\326]\337,\335\354\365\322\324\356dvy\273\330\271\231\20\351\311\354\321z\273\343\323/\316f\2634\317\262\354a&\322b6{wy\226\314\316?\271\315\335\32T,\266\263\33\267\271^\354v\256\231\355\326\263\32\344\314\314\252\2315\213\355n\263\260\267\350\16\317Z\f}\315/\27n\233\314\326\355lw\205\226\313E\355V[7k\326\365\355\265[\355Nfx~V_\231\325\207\305\352\303l\261c\367\253\365nf\226\313\365g\327\314\23\260\303\363\343\365\306\231k\273t`\300\354\355\225\353z\332\316\332\365fv\r\312g\333n\346\374\257q\333\305\207U\240pg>\342\303\317\346nv\267\276\335$-\330\324\254\257\371\315\366\312?\17\342=\t\230\334n>\233=\272\3\335\253\335\306lA\337\16c\371\305r+\2671\313\331\353[\213\241\223\347q\"
 w\261\332\271"..., 4096) = 4096
12213 close(6)                          = 0
12213 munmap(0x40094000, 4096)          = 0
12213 rename("./clamav-b98155eced458604160ab4d93a9f29a8", "daily.cvd") = 0
12213 open("daily.inc", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 6
12213 fstat64(6, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
12213 fcntl64(6, F_SETFD, FD_CLOEXEC)   = 0
12213 stat64("daily.inc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
12213 rmdir("daily.inc")                = -1 ENOTEMPTY (Directory not empty)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 400
12213 lstat64("daily.inc/COPYING", {st_mode=S_IFREG|0644, st_size=17992, ...}) 
= 0
12213 unlink("daily.inc/COPYING")       = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.db", {st_mode=S_IFREG|0644, st_size=22942, ...}) 
= 0
12213 unlink("daily.inc/daily.db")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.hdb", {st_mode=S_IFREG|0644, st_size=10049, 
...}) = 0
12213 unlink("daily.inc/daily.hdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.ndb", {st_mode=S_IFREG|0644, st_size=1444463, 
...}) = 0
12213 unlink("daily.inc/daily.ndb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.zmd", {st_mode=S_IFREG|0644, st_size=1848, ...}) 
= 0
12213 unlink("daily.inc/daily.zmd")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.fp", {st_mode=S_IFREG|0644, st_size=2062, ...}) 
= 0
12213 unlink("daily.inc/daily.fp")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.mdb", {st_mode=S_IFREG|0644, st_size=94062, 
...}) = 0
12213 unlink("daily.inc/daily.mdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.info", {st_mode=S_IFREG|0644, st_size=413, ...}) 
= 0
12213 unlink("daily.inc/daily.info")    = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.wdb", {st_mode=S_IFREG|0644, st_size=177, ...}) 
= 0
12213 unlink("daily.inc/daily.wdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.pdb", {st_mode=S_IFREG|0644, st_size=1646, ...}) 
= 0
12213 unlink("daily.inc/daily.pdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.cfg", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0
12213 unlink("daily.inc/daily.cfg")     = -1 EACCES (Permission denied)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 0
12213 lseek(6, 0, SEEK_SET)             = 0
12213 stat64("daily.inc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
12213 rmdir("daily.inc")                = -1 ENOTEMPTY (Directory not empty)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 400
12213 lstat64("daily.inc/COPYING", {st_mode=S_IFREG|0644, st_size=17992, ...}) 
= 0
12213 unlink("daily.inc/COPYING")       = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.db", {st_mode=S_IFREG|0644, st_size=22942, ...}) 
= 0
12213 unlink("daily.inc/daily.db")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.hdb", {st_mode=S_IFREG|0644, st_size=10049, 
...}) = 0
12213 unlink("daily.inc/daily.hdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.ndb", {st_mode=S_IFREG|0644, st_size=1444463, 
...}) = 0
12213 unlink("daily.inc/daily.ndb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.zmd", {st_mode=S_IFREG|0644, st_size=1848, ...}) 
= 0
12213 unlink("daily.inc/daily.zmd")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.fp", {st_mode=S_IFREG|0644, st_size=2062, ...}) 
= 0
12213 unlink("daily.inc/daily.fp")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.mdb", {st_mode=S_IFREG|0644, st_size=94062, 
...}) = 0
12213 unlink("daily.inc/daily.mdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.info", {st_mode=S_IFREG|0644, st_size=413, ...}) 
= 0
12213 unlink("daily.inc/daily.info")    = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.wdb", {st_mode=S_IFREG|0644, st_size=177, ...}) 
= 0
12213 unlink("daily.inc/daily.wdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.pdb", {st_mode=S_IFREG|0644, st_size=1646, ...}) 
= 0
12213 unlink("daily.inc/daily.pdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.cfg", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0
12213 unlink("daily.inc/daily.cfg")     = -1 EACCES (Permission denied)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 0
12213 lseek(6, 0, SEEK_SET)             = 0
12213 stat64("daily.inc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
12213 rmdir("daily.inc")                = -1 ENOTEMPTY (Directory not empty)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 400
12213 lstat64("daily.inc/COPYING", {st_mode=S_IFREG|0644, st_size=17992, ...}) 
= 0
12213 unlink("daily.inc/COPYING")       = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.db", {st_mode=S_IFREG|0644, st_size=22942, ...}) 
= 0
12213 unlink("daily.inc/daily.db")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.hdb", {st_mode=S_IFREG|0644, st_size=10049, 
...}) = 0
12213 unlink("daily.inc/daily.hdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.ndb", {st_mode=S_IFREG|0644, st_size=1444463, 
...}) = 0
12213 unlink("daily.inc/daily.ndb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.zmd", {st_mode=S_IFREG|0644, st_size=1848, ...}) 
= 0
12213 unlink("daily.inc/daily.zmd")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.fp", {st_mode=S_IFREG|0644, st_size=2062, ...}) 
= 0
12213 unlink("daily.inc/daily.fp")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.mdb", {st_mode=S_IFREG|0644, st_size=94062, 
...}) = 0
12213 unlink("daily.inc/daily.mdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.info", {st_mode=S_IFREG|0644, st_size=413, ...}) 
= 0
12213 unlink("daily.inc/daily.info")    = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.wdb", {st_mode=S_IFREG|0644, st_size=177, ...}) 
= 0
12213 unlink("daily.inc/daily.wdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.pdb", {st_mode=S_IFREG|0644, st_size=1646, ...}) 
= 0
12213 unlink("daily.inc/daily.pdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.cfg", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0
12213 unlink("daily.inc/daily.cfg")     = -1 EACCES (Permission denied)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 0
12213 lseek(6, 0, SEEK_SET)             = 0
12213 stat64("daily.inc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
12213 rmdir("daily.inc")                = -1 ENOTEMPTY (Directory not empty)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 400
12213 lstat64("daily.inc/COPYING", {st_mode=S_IFREG|0644, st_size=17992, ...}) 
= 0
12213 unlink("daily.inc/COPYING")       = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.db", {st_mode=S_IFREG|0644, st_size=22942, ...}) 
= 0
12213 unlink("daily.inc/daily.db")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.hdb", {st_mode=S_IFREG|0644, st_size=10049, 
...}) = 0
12213 unlink("daily.inc/daily.hdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.ndb", {st_mode=S_IFREG|0644, st_size=1444463, 
...}) = 0
12213 unlink("daily.inc/daily.ndb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.zmd", {st_mode=S_IFREG|0644, st_size=1848, ...}) 
= 0
12213 unlink("daily.inc/daily.zmd")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.fp", {st_mode=S_IFREG|0644, st_size=2062, ...}) 
= 0
12213 unlink("daily.inc/daily.fp")      = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.mdb", {st_mode=S_IFREG|0644, st_size=94062, 
...}) = 0
12213 unlink("daily.inc/daily.mdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.info", {st_mode=S_IFREG|0644, st_size=413, ...}) 
= 0
12213 unlink("daily.inc/daily.info")    = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.wdb", {st_mode=S_IFREG|0644, st_size=177, ...}) 
= 0
12213 unlink("daily.inc/daily.wdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.pdb", {st_mode=S_IFREG|0644, st_size=1646, ...}) 
= 0
12213 unlink("daily.inc/daily.pdb")     = -1 EACCES (Permission denied)
12213 lstat64("daily.inc/daily.cfg", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0
12213 unlink("daily.inc/daily.cfg")     = -1 EACCES (Permission denied)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 0
12213 lseek(6, 0, SEEK_SET)             = 0
12213 stat64("daily.inc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
12213 rmdir("daily.inc")                = -1 ENOTEMPTY (Directory not empty)
12213 getdents64(0x6, 0x805d130, 0x1000, 0x4023dc80) = 400
12213 lstat64("daily.inc/COPYING", {st_mode=S_IFREG|0644, st_size=17992, ...}) 
= 0
........
_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html

Reply via email to