VirtualBox

Ignore:
Timestamp:
Nov 9, 2011 12:52:14 PM (13 years ago)
Author:
vboxsync
Message:

Additions/solaris/SharedFolders: fix directory seeking bug with incorrect dirent offset. du on a shared folder works now instead of causing a kernel panic.

Location:
trunk/src/VBox/Additions/solaris/SharedFolders
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c

    r38843 r39249  
    878878        uint32_t nents;
    879879        uint32_t size;
    880         uint32_t cnt;
     880        off_t offset;
    881881        sffs_dirents_t *cur_buf;
    882882        sffs_stats_t *cur_stats;
     
    937937        }
    938938
    939         cnt = 0;
     939        offset = 0;
    940940        for (;;) {
    941941                numbytes = infobuff_alloc;
     
    989989                        dirent = (dirent64_t *)
    990990                            (((char *) &cur_buf->sf_entries[0]) + cur_buf->sf_len);
    991                         strcpy(&dirent->d_name[0], info->name.String.utf8);
     991                        strncpy(&dirent->d_name[0], info->name.String.utf8, DIRENT64_NAMELEN(reclen));
    992992                        dirent->d_reclen = reclen;
    993                         dirent->d_off = cnt;
     993                        offset += reclen;
     994                        dirent->d_off = offset;
    994995
    995996                        cur_buf->sf_len += reclen;
    996                         ++cnt;
    997997
    998998                        /* save the stats */
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c

    r39113 r39249  
    356356            ddi_strtol(optval, NULL, 10, &val) == 0 &&
    357357            (int)val == val)
     358        {
    358359                stat_ttl = val;
     360        }
     361        else
     362                vfs_setmntopt(vfsp, "stat_ttl", VBOXSOLQUOTE(DEF_STAT_TTL_MS), 0);
    359363
    360364        /*
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c

    r39218 r39249  
    313313                sfnode_clear_dir_list(parent);
    314314                if (parent->sf_children == 0)
    315                         panic("sfnode_destroy(%s) parent has no child", node->sf_path);
     315                        panic("sfnode_destroy parent (%s) has no child", parent->sf_path);
    316316                --parent->sf_children;
    317317                if (parent->sf_children == 0 &&
     
    21382138        if (*no < 0 || *no > MAXOFFSET_T)
    21392139                return (EINVAL);
     2140
     2141        if (v->v_type == VDIR)
     2142        {
     2143                sffs_dirents_t *cur_buf = VN2SFN(v)->sf_dir_list;
     2144                off_t offset = 0;
     2145
     2146                if (cur_buf == NULL)
     2147                        return (0);
     2148
     2149                while (cur_buf != NULL) {
     2150                        if (*no >= offset && *no <= offset + cur_buf->sf_len)
     2151                                return (0);
     2152                        offset += cur_buf->sf_len;
     2153                        cur_buf = cur_buf->sf_next;
     2154                }
     2155                return (EINVAL);
     2156        }
    21402157        return (0);
    21412158}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette