Hi Arthur,

I think I understand what you're trying to solve but you should really get 
Mickey's feedback on the code, as she's the subject matter expert on ClamAV's 
on-access scanning.  I will make a couple of recommendations...

I see your patch targets an earlier version of ClamAV.  We don't add new 
features to older versions if we can help it, and the on-access code was 
migrated out of clamd and into a new program called clamonacc.   Specifically, 
the function you're modifying is now found under clamonacc/inotif/hash.c.  
Please fork & clone https://github.com/Cisco-Talos/clamav-devel to contribute 
code to the ClamAV project.  The default branch will be set to dev/0.103, for 
all features going into 0.103.  

Your patch creates a large buffer on the stack.  Stack space can be quite 
limited.  I would recommend allocating the buffer on the heap with malloc (and 
maybe realloc).  I should also note that "buf" is an overly simple variable 
name.  I would prefer something more descriptive.  Inline comments, using the 
/* */ format are also appreciated.  Having said that, I googled around a bit to 
try to figure out where your 10240 number comes from.  It looks to me like 
maybe that was a typo from "1024", which is a number suggested here by some 
alpine developers who noted they needed a large buffer so that they don't 
receive an error or truncated entry (behavior varies between musl/glibc 
implementations). https://gitlab.alpinelinux.org/alpine/aports/issues/7093 

If 1024 is correct, I would also recommend either adding a comment to explain 
the size and/or creating a preprocessor macro (#define) with a descriptive 
name.  Something like:
    #define MOUNT_ENTRY_BUFFER_MAX_SIZE 1024

Respectfully,
Micah


Micah Snyder
ClamAV Development
Talos
Cisco Systems, Inc.
 


On 10/10/19, 8:28 PM, "clamav-devel on behalf of Arthur Ramsey" 
<clamav-devel-boun...@lists.clamav.net on behalf of arthurramse...@gmail.com> 
wrote:

    After more testing this seems better:
    
    --- a/clamd/onaccess_hash.c 2019-10-10 19:19:06.000000000 -0500
    +++ b/clamd/onaccess_hash.c    2019-10-10 19:14:23.000000000 -0500
    @@ -33,6 +33,7 @@
     #include <string.h>
     #include <errno.h>
     #include <stdbool.h>
    +#include <mntent.h>
     
     #include <sys/fanotify.h>
     
    @@ -589,6 +590,22 @@
     
          struct onas_hnode *hnode = NULL;
     
    +        char buf[10240];
    +        struct mntent ent;
    +        struct mntent *mntent;
    +        FILE *mountinfo;
    +        mountinfo = setmntent("/proc/mounts", "r");
    +        if (mountinfo == NULL) {
    +            logg("!ScanOnAccess: setmntent failed\n");
    +            return CL_EARG;
    +        }
    +        while ((mntent = getmntent_r(mountinfo, &ent, buf, sizeof(buf))) 
!= NULL) {
    +            if (strcmp(curr->fts_path, pathname) != 0 && 
strcmp(curr->fts_path, mntent->mnt_dir) == 0) {
    +                onas_ht_add_hierarchy(ht, curr->fts_path);
    +            }
    +        }
    +        endmntent(mountinfo);
    +
          /* May want to handle other options in the future. */
          switch (curr->fts_info) {
             case FTS_D:
    
    _______________________________________________
    
    clamav-devel mailing list
    clamav-devel@lists.clamav.net
    https://lists.clamav.net/mailman/listinfo/clamav-devel
    
    Please submit your patches to our Bugzilla: http://bugzilla.clamav.net
    
    Help us build a comprehensive ClamAV guide:
    https://github.com/vrtadmin/clamav-faq
    
    http://www.clamav.net/contact.html#ml
    

_______________________________________________

clamav-devel mailing list
clamav-devel@lists.clamav.net
https://lists.clamav.net/mailman/listinfo/clamav-devel

Please submit your patches to our Bugzilla: http://bugzilla.clamav.net

Help us build a comprehensive ClamAV guide:
https://github.com/vrtadmin/clamav-faq

http://www.clamav.net/contact.html#ml

Reply via email to